Existe uma maneira de enviar apenas o conteúdo da checkbox de meta na página de edição de postagem

Na página admin add / edit post, eu tenho uma nova checkbox de meta com botão de envio. Quero enviá-los separadamente. Por exemplo, se alguém clicar no botão Publicar / atualizar, ele salvará todo o conteúdo da publicação e, quando um clique no botão de envio da checkbox de meta, ele deve salvar os campos da checkbox de meta em uma nova tabela de database. O código está anexado.

add_action( 'add_meta_boxes', 'cd_meta_box_add' ); function cd_meta_box_add() { add_meta_box( 'my-meta-box-id', 'Copy', 'cd_meta_box_cb', 'post', 'side', 'high', $post->ID); } function cd_meta_box_cb( $post ) { wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' ); global $wpdb, $wp_query; $wpdb->show_errors(); $table = $wpdb->base_prefix . 'post_copy'; $parent_post_id = $post->ID; $parent_blog_id = get_current_blog_id(); $query= "SELECT * FROM {$table} WHERE child_post_id= '".$parent_post_id."' AND child_blog_id = '".$parent_blog_id."' "; $resultset = $wpdb->get_results($query); if(!empty ($resultset)){ foreach ( $resultset as $result ) { $copy_type = $result->copy_type; } } $if_post_child = $wpdb->get_var( "SELECT COUNT(*) FROM {$table} where child_post_id = '".$post->ID."' and child_blog_id ='".$parent_blog_id."' and copy_type = '".$copy_type."'"); if( $if_post_child == 0 ){ ?> 
<input type="hidden" value="" name= "parent_blog_id">
    <?php $user_id = get_current_user_id(); $user_blogs = get_blogs_of_user( $user_id ); //echo "
    "; print_r($user_blogs); echo "

    "; foreach ($user_blogs as $user_blog) { $child_blog_id = $user_blog ->userblog_id; $if_child = $wpdb->get_var( "SELECT COUNT(*) FROM {$table} where parent_post_id = '".$parent_post_id."' and child_blog_id ='".$child_blog_id."'"); $querystr = "SELECT * FROM {$table} WHERE parent_blog_id= '".$parent_blog_id."' AND parent_post_id = '".$parent_post_id."' AND child_blog_id = '".$child_blog_id."' "; $result = $wpdb->get_results($querystr); if(!empty ($result)){ foreach ( $result as $res ) { $sel_child_blog_id = $res->child_blog_id; $set_post_type = $res->copy_type; } } //print_r($result); if($if_child == 0){ ?>

  • <input type="hidden" name="blog_check_name[]" id="blog_check_name_userblog_id ?>" value="blogname; ?>"/>

get_var( "SELECT COUNT(*) FROM {$table} where parent_post_id = '".$parent_post_id."'"); if($if_not_parent == 0){ submit_button( __( 'Copy', 'Copy-post' ), 'button button-primary button-large', 'copy-post', false ); }else{ ?>

0 && $copy_type == 'child_linked'){ echo "This is a child post of CEBBlogs. Any edits made here will break the link with the parent post and will disable it from being updated in future by the parent. To maintain the link with the Parent post please make all edits at the Parent post and copy them down.

"; echo "View Parent Post"; }else if ($if_post_child > 0 && $copy_type == 'child_unlinked'){ echo "This is a child post of CEBBlogs. It has been updated and is no longer linked to the parent post.

"; echo "View Parent Post"; } }

Agora eu chamei o save_post

 add_action( 'save_post', 'cd_meta_box_save' ); function cd_meta_box_save( $post_id ) { // Bail if we're doing an auto save //if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // if our nonce isn't there, or we can't verify it, bail if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return; // if our current user can't edit this post, bail if( !current_user_can( 'edit_post' ) ) return; $registerFormParameterHandler = new FormParameterHandler($_POST); if($_POST['copy-post'] == 'Copy'){ echo 'here'; global $wpdb, $wp_query; $wpdb->show_errors(); $id = $wp_query->post->ID; // get post ID $table = $wpdb->base_prefix . 'post_copy'; // update popularpostsdata table $blog_checked = $_POST[blog_check]; for ($i =0; $i post_author), mysql_real_escape_string($post_date), mysql_real_escape_string($post_date_gmt), mysql_real_escape_string($registerFormParameterHandler->post_content), mysql_real_escape_string($registerFormParameterHandler->post_title), mysql_real_escape_string($registerFormParameterHandler->post_excerpt), mysql_real_escape_string($child_blog_type), mysql_real_escape_string($registerFormParameterHandler->comment_status), mysql_real_escape_string($registerFormParameterHandler->ping_status), mysql_real_escape_string($registerFormParameterHandler->post_password), mysql_real_escape_string($registerFormParameterHandler->post_name), mysql_real_escape_string($registerFormParameterHandler->to_ping), mysql_real_escape_string($registerFormParameterHandler->pinged), mysql_real_escape_string($registerFormParameterHandler->post_modified), mysql_real_escape_string($registerFormParameterHandler->post_modified_gmt), mysql_real_escape_string($registerFormParameterHandler->post_content_filtered), mysql_real_escape_string($registerFormParameterHandler->post_parent), mysql_real_escape_string($registerFormParameterHandler->guid), mysql_real_escape_string($registerFormParameterHandler->menu_order), mysql_real_escape_string($registerFormParameterHandler->post_type), mysql_real_escape_string($registerFormParameterHandler->post_mime_type), mysql_real_escape_string($registerFormParameterHandler->comment_count) ); $cols = "post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count"; echo $sql = "insert into cebblogs_".$child_blog_id."_posts (".$cols.") values(".$vals.")"; $wpdb->query ($sql); $new_post_id = mysql_insert_id(); }else if($child_blog_type =='update'){ // Code will go here $get_child_post_id = "Select child_post_id from {$table} where parent_post_id = {$parent_post_id} and child_blog_id = {$child_blog_id} and copy_type= 'child_linked'"; $result = $wpdb->get_results($get_child_post_id); if(!empty ($result)){ foreach ( $result as $res ) { $child_post_id = $res->child_post_id; } } $vals = sprintf("'%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s', '%s'", mysql_real_escape_string($child_post_id), mysql_real_escape_string($registerFormParameterHandler->post_author), mysql_real_escape_string($post_date), mysql_real_escape_string($post_date_gmt), mysql_real_escape_string($registerFormParameterHandler->post_content), mysql_real_escape_string($registerFormParameterHandler->post_title), mysql_real_escape_string($registerFormParameterHandler->post_excerpt), mysql_real_escape_string($child_blog_type), mysql_real_escape_string($registerFormParameterHandler->comment_status), mysql_real_escape_string($registerFormParameterHandler->ping_status), mysql_real_escape_string($registerFormParameterHandler->post_password), mysql_real_escape_string($registerFormParameterHandler->post_name), mysql_real_escape_string($registerFormParameterHandler->to_ping), mysql_real_escape_string($registerFormParameterHandler->pinged), mysql_real_escape_string($registerFormParameterHandler->post_modified), mysql_real_escape_string($registerFormParameterHandler->post_modified_gmt), mysql_real_escape_string($registerFormParameterHandler->post_content_filtered), mysql_real_escape_string($registerFormParameterHandler->post_parent), mysql_real_escape_string($registerFormParameterHandler->guid), mysql_real_escape_string($registerFormParameterHandler->menu_order), mysql_real_escape_string($registerFormParameterHandler->post_type), mysql_real_escape_string($registerFormParameterHandler->post_mime_type), mysql_real_escape_string($registerFormParameterHandler->comment_count) ); $cols = "ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count"; //echo "
";print_r($child_post_id ); echo "

"; $sql = "REPLACE INTO cebblogs_".$child_blog_id."_posts (".$cols.") values(".$vals.")"; $wpdb->query ($sql); } $numberofpost = $wpdb->get_var( "SELECT COUNT(*) FROM {$table} where parent_blog_id = '".$parent_blog_id."' and parent_post_id = '".$parent_post_id."' and child_blog_id ='".$child_blog_id."'"); if($numberofpost == 0) { $result = $wpdb->query("INSERT INTO {$table} VALUES ('' , '".$parent_blog_id."', '".$parent_post_id."', '".$child_blog_id."', '".$new_post_id."', 'child_linked', '2013-04-09 07:00:00', '2013-04-17 06:00:00')"); } } } exit; }

Esta é a multa do código, exceto duas coisas: 1. Executa uma consulta duas vezes em save_post. 2. Todo o código é executado ou você pressiona o botão publicar ou você pressiona o botão de envio da checkbox de meta

Solutions Collecting From Web of "Existe uma maneira de enviar apenas o conteúdo da checkbox de meta na página de edição de postagem"

IMO, é muito melhor resolver isso com o Ajax. Talvez seja possível o jeito que você está propondo, mas parece um pouco confuso na perspectiva da Experiência do Usuário: dois botões similares que fazem coisas diferentes.
E se o usuário modificar o conteúdo e os campos personalizados, atualiza um e perde o outro? Talvez o gancho de ação save_post seja apenas uma function de backup.

Ele pode ser implementado com as seguintes etapas, abrangendo apenas o lado do Ajax. Você encontrará uma checkbox de meta Ajaxified completa aqui: Desatando imagens de uma postagem

1) Enqueue e localize o Javascript
Podemos passar qualquer valor para JS na matriz, como 'custom_value' = $something e recuperá-lo em JS com wp_ajax.custom_value . O segundo parâmetro de wp_localize_script , wp_ajax , é o nome do object a ser referenciado em JS.

 add_action( "admin_print_scripts-post.php", 'enqueue_ajax_wpse_97845' ); function enqueue_ajax_wpse_97845() { // Check post type global $typenow; if( 'post' != $typenow ) return; wp_enqueue_script( 'wpse_97845_js', plugins_url( '/', __FILE__ ) . 'wpse_97845.js' ); wp_localize_script( 'wpse_97845_js', 'wp_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'ajaxnonce' => wp_create_nonce( 'wpse_97845_validation' ) ) ); } 

2) Adicione a function Ajax que será chamada pela JS
Aqui, salvaremos nossos dados com base nos dados enviados pela chamada Ajax no arquivo Javascript. Primeiro, fazemos uma verificação de segurança. Em seguida, verifique se os dados $_POST corretos foram enviados. E, finalmente, faça nossas coisas.
Não tenho certeza se global $post; $post->ID global $post; $post->ID está disponível neste momento. Caso contrário, deve ser agarrado e enviado com jQuery / JS.

 add_action( 'wp_ajax_update_metabox_wpse_97845', 'update_metabox_wpse_97845' ); function update_metabox_wpse_97845() { check_ajax_referer( 'wpse_97845_validation', 'ajaxnonce' ); if( !isset( $_POST['wpse_97845_custom_field'] ) ) { wp_send_json_error( array( 'error' => __( 'Post ID not set' ) )); } wp_send_json_success( 'Success' ); } 

3) arquivo Javascript / jQuery
Aqui, detectamos que nosso botão de atualização personalizado foi pressionado. Pegue as informações dos campos de input e envie-a para a function Ajax anterior.
Este é o arquivo wpse_97845.js que está ao lado do arquivo de plugin.

 jQuery(document).ready(function($) { /** * Handle error messages */ function wpse_97845_handle_error( error ) { // Do something } /** * Process Ajax response */ function wpse_97845_do_response( response ) { // Error if( !response.success ) { wpse_97845_handle_error( response.data.error ); return; } // do something } /** * Ajax button call */ $('#wpse_97845_update_button').click(function() { origin_value = $('#input_field_id').val(); /* Prepare data */ var data = { action: 'query_external_site', ajaxnonce: wp_ajax.ajaxnonce, wpse_97845_custom_field: origin_value }; $.post( wp_ajax.ajaxurl, data, wpse_97845_do_response ); }); }); 

[Atualizar]

Exemplo de trabalho

Verifique os comentários do código.

publicar para outra meta caixa de blog

mu-copy-post.php

 < ?php /** * Plugin Name: Multisite - Copy Post to Other Site * Plugin URI: https://wordpress.stackexchange.com/q/97845/12615 * Version: 1.0 * Author: brasofilo * Author URI: https://wordpress.stackexchange.com/users/12615/brasofilo */ add_action( 'add_meta_boxes', 'add_custom_box_wpse_94701' ); add_action( "admin_print_scripts-post.php", 'enqueue_ajax_wpse_97845' ); add_action( 'wp_ajax_update_metabox_wpse_97845', 'update_metabox_wpse_97845' ); function add_custom_box_wpse_94701() { add_meta_box( 'sectionid_wpse_94701', __( 'Copy Post' ), 'copy_post_box_wpse_94701', 'post', 'side' ); } function copy_post_box_wpse_94701() { global $wpdb,$post; $blogs = $wpdb->get_results(" SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' AND mature = '0' AND public = '1' "); $original_blog_id = get_current_blog_id(); // Dropdown echo ''; // Publish button echo "Publish"; // Error and success messages echo ''; echo ''; switch_to_blog( $original_blog_id ); } function enqueue_ajax_wpse_97845() { // Check post type global $typenow; if( 'post' != $typenow ) return; wp_enqueue_script( 'wpse_97845_js', plugins_url( '/', __FILE__ ) . 'mu-copy-post.js' ); wp_localize_script( 'wpse_97845_js', 'wp_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'ajaxnonce' => wp_create_nonce( 'wpse_97845_validation' ) ) ); } function update_metabox_wpse_97845() { check_ajax_referer( 'wpse_97845_validation', 'ajaxnonce' ); if( empty( $_POST['wpse_97845_blog_id'] ) || empty( $_POST['wpse_97845_post_id'] ) ) { wp_send_json_error( array( 'error' => __( 'Blog ID not set' ) )); } // Grac actual post data and current blog ID $actual_post = get_post( $_POST['wpse_97845_post_id'] ); $original_blog_id = get_current_blog_id(); // Prepare cloned post $copy_post = array( 'post_title' => $actual_post->post_title, 'post_content' => $actual_post->post_content, 'post_status' => $actual_post->post_status, 'post_type' => $actual_post->post_type ); // Switch to destination blog, grab its name and insert cloned post switch_to_blog($_POST['wpse_97845_blog_id']); $blog_name = get_option( 'blogname' ); $result = wp_insert_post($copy_post); // Restore current blog and return response switch_to_blog( $original_blog_id ); wp_send_json_success( "Post added to $blog_name with the ID of $result" ); } 

mu-copy-post.js

 jQuery(document).ready(function($) { /** * Handle error messages */ function wpse_97845_handle_error( error ) { $('#ajax-error').html(error).show(); } /** * Process Ajax response */ function wpse_97845_do_response( response ) { // Error if( !response.success ) { wpse_97845_handle_error( response.data.error ); return; } // Display success response $('#ajax-success').html(response.data).show(); } /** * Ajax button call */ $('#publish-to-other-blog').click( function(event) { // Block button default event.preventDefault(); // Clear previous messages $('#ajax-success').hide(); $('#ajax-error').hide(); // Grab info blog_id = $('#other-blog-id').val(); post_id = $('#publish-to-other-blog').attr('name'); // Prepare data var data = { action: 'update_metabox_wpse_97845', ajaxnonce: wp_ajax.ajaxnonce, wpse_97845_blog_id: blog_id, wpse_97845_post_id: post_id }; // Send Ajax request $.post( wp_ajax.ajaxurl, data, wpse_97845_do_response ); }); });