我删除了帖子上的默认作者元框,并添加了一个复选框,用于确定帖子是否应显示作者的署名和作者框。它一直在工作,但由于某种原因,在某些情况下它变得不受控制。
这是在公开了一些私人帖子之后,当我改变了其他帖子的永久链接时发生的。将数据库从localhost迁移到服务器时也会发生这种情况。
这是我的代码:
/* Remove and then add back in the author box to include check box to display author byline and bio */
add_action( \'admin_menu\', \'fb_modify_author_meta_boxes\' );
function fb_modify_author_meta_boxes() {
remove_meta_box(\'authordiv\', \'post\', \'normal\');
add_meta_box(\'fb_authordiv\', __(\'Author\'), \'fb_post_author_meta_box\', \'post\', \'normal\', \'core\');
}
function fb_post_author_meta_box( $post ) {
global $user_ID;
// get all authors
$wp_user_search = new WP_User_Search($usersearch = \'\', $userspage = \'\', \'author\');
$authors = join( \', \', $wp_user_search->get_results() );?>
<label class="screen-reader-text" for="post_author_override"><?php _e(\'Author\'); ?></label>
<?php
wp_dropdown_users( array(
\'name\' => \'post_author_override\',
\'selected\' => empty($post->ID) ? $user_ID : $post->post_author,
\'include_selected\' => true
) );
global $post;
$custom = get_post_custom($post->ID);
$show_author = $custom["show_author"][0];
?>
<input type="checkbox" name="show_author" <?php if( $show_author == true ) { ?>checked="checked"<?php } ?> style="margin-left:15px" /> Check the box to display the author\'s byline and author box.
<?php }
/* Save checkbox status */
add_action(\'save_post\', \'save_details\');
function save_details($post_ID = 0) {
$post_ID = (int) $post_ID;
$post_type = get_post_type( $post_ID );
$post_status = get_post_status( $post_ID );
if ($post_type) {
update_post_meta($post_ID, "show_author", $_POST["show_author"]);
}
return $post_ID;
}
如果有人知道为什么会失去这个地位,我将非常感谢你的帮助。
谢谢
最合适的回答,由SO网友:TheDeadMedic 整理而成
问题是save_post
在“编辑帖子”屏幕以外的许多地方激发-当它激发时,您的代码会认为复选框未选中,并覆盖您保存的状态。
向元框添加其他隐藏输入:
<?php
// Don\'t global post, use the $post parameter already passed to the function
// global $post;
// Avoid undefined index errors by passing the third argument "single" true
// The double !! will cast the value to a boolean true/false
$show_author = !! get_post_meta( $post->ID, \'show_author\', true );
?>
<input type="checkbox" name="show_author" <?php checked( $show_author ) /* WordPress helper function */ ?> style="margin-left:15px" /> Check the box to display the author\'s byline and author box.
<input type="hidden" name="do_show_author" value="1" />
然后在保存复选框状态之前检查它是否存在:
function save_details( $post_ID ) {
if ( isset( $_POST[\'do_show_author\'] ) ) {
// Use isset - unchecked checkboxes won\'t send a value to $_POST, you\'ll get an undefined index error
update_post_meta( $post_ID, \'show_author\', isset( $_POST[\'show_author\'] ) ? \'1\' : \'0\' );
}
}