在管理员添加/编辑帖子页面上,我有一个带有提交按钮的新元框。我想单独提交。例如,如果有人单击“发布/更新”按钮,则会保存所有帖子内容;如果有人单击“元框提交”按钮,则会将元框字段保存在新的DB表中。代码已附加。
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 ){
?>
<div id="scrollbox">
<input type="hidden" value="<?php echo $parent_blog_id ?>" name= "parent_blog_id">
<ul>
<?php $user_id = get_current_user_id();
$user_blogs = get_blogs_of_user( $user_id );
//echo "<pre>"; print_r($user_blogs); echo "</pre>";
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){
?>
<li style="margin-bottom:10px;"><label for="all_blog_name">
<input type="hidden" name="blog_check_name[]" id="blog_check_name_<?php echo $user_blog ->userblog_id ?>" value="<?php echo $user_blog ->blogname; ?>"/>
<input class="chk-copy" type="checkbox" name="blog_check[]" id="blog_check_<?php echo $user_blog ->userblog_id ?>" value="<?php echo $user_blog ->userblog_id; ?>" />
<span>
<?php
echo $user_blog->blogname;
?>
</span>
<br> <input type="radio" name="child_post_<?php echo $user_blog ->userblog_id; ?>" id="child_post_<?php echo $user_blog ->userblog_id; ?>"checked value="draft" /> Draft
<input type="radio" name="child_post_<?php echo $user_blog ->userblog_id; ?>" id="child_post_<?php echo $user_blog ->userblog_id; ?>" value="publish" /> Published
<input type="radio" name="child_post_<?php echo $user_blog ->userblog_id; ?>" id="child_post_<?php echo $user_blog ->userblog_id; ?>" value="future" /> Scheduled
<br>
</li>
<?php
} else { ?>
<input type="hidden" name="blog_check_name[]" id="blog_check_name_<?php echo $user_blog ->userblog_id ?>" value="<?php echo $user_blog ->blogname; ?>"/>
<li style="margin-bottom:10px;"><label for="all_blog_name">
<?php
if($sel_child_blog_id == $user_blog ->userblog_id){
$chked = "checked";
}
?>
<input class="chk-copy" type="checkbox" name="blog_check[]" id="blog_check_<?php echo $user_blog ->userblog_id ?>" value="<?php echo $user_blog ->userblog_id; ?>" <?php echo $chked ?>/>
<span>
<?php
echo $user_blog->blogname;
?>
</span>
<br> <input type="radio" name="child_post_<?php echo $user_blog ->userblog_id; ?>" id="child_post_<?php echo $user_blog ->userblog_id; ?>" value="update" checked /> Update
<input type="radio" name="child_post_<?php echo $user_blog ->userblog_id; ?>" id="child_post_<?php echo $user_blog ->userblog_id; ?>" value="no_update" /> No Update
<br>
</li>
<?php } // End If
} // End For
?>
</label>
</ul>
</div>
<div class="btncopy">
<?php
$if_not_parent = $wpdb->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{
?>
<input type="button" name="copy-post" id="copy-post" class="button button-primary button-large" value="Copy" onClick ="openbox_parent(\'Copy Confirm\', 1)" />
<?php } ?>
</div>
<input type="hidden" name="copy-post" id="copy-post" class="button button-primary button-large" value="Copy" />
<div id="shadowing-parent"></div>
<div id="box-parent">
<span id="boxtitle-parent"></span>
<label for="confirmation_copy">
<p> Update the following child posts : </p>
<div id="checkboxContainer"></div>
<p>
<input type="submit" name="Copy" value="Copy">
<input type="button" name="cancel" value="Cancel" onClick="closebox_parent()">
</p>
</label>
<!--/form-->
</div>
<?php
} // End of $if_post_child
else if ($if_post_child > 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.<br><br>";
echo "<a href=\'#\'>View Parent Post</a>";
}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.<br><br>";
echo "<a href=\'#\'>View Parent Post</a>";
}
}
现在我打电话给save\\u postadd_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 < count($blog_checked); $i++){
$child_blog_id = $blog_checked[$i];
// $child_blog_type = Published, Draft, Schedule, update, No Update
$child_blog_type = $_POST[\'child_post_\'.$child_blog_id];
$parent_blog_id = $_POST[\'parent_blog_id\'];
$parent_post_id = $_POST[\'post_ID\'];
// Date time for New Inserted post
$post_date = date("Y-m-d h:m:s");
$post_date_gmt = gmdate("Y-m-d h:m:s");
// If the post is Published, Draft, zzzzzz,--- Copy content
if($child_blog_type ==\'publish\' || $child_blog_type ==\'draft\' || $child_blog_type ==\'future\')
{
$vals = sprintf("\'%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($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 = "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 "<pre>";print_r($child_post_id ); echo "</pre>";
$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;
}
这一切代码都很好,除了两件事:1。它在save\\u post中执行查询两次。2、所有代码要么按publish按钮,要么按meta box submit按钮执行