我在WordPress中设置复选框字段的默认值时遇到了一个问题。我在自定义帖子中有一个复选框输入字段(metabox)。我希望默认选中该复选框。若用户取消选中它,那个么应该保存并取消选中它,并在刷新页面时保持未选中状态。我的问题是无法设置复选框的默认值。我只有两个价值观可以合作。主要问题出现了,因为savemetadata函数在我单击“添加新”帖子时运行,所以默认值会自动保存在数据库中,而不会保存新帖子。我已经试了三天了。我尝试在用户未选中复选框时保存默认值“是”。
但在这种情况下,当用户取消选中时,它仍然会被默认值选中。我的当前代码段
// for displaying metabox
function aps_add_meta_box() {
add_meta_box(
\'aps_metabox\',
__( \'Slider Settings & Shortcode Generator\', APS_TEXTDOMAIN ),
\'aps_metabox_cb\', // callback
\'apspostslider\', // screen or posttype
\'normal\'
);}
add_action( \'add_meta_boxes\', \'aps_add_meta_box\' );
function aps_metabox_cb( $post ) {
wp_nonce_field( \'aps_meta_save\', \'aps_meta_save_nounce\' ); // nounce
$aps_display_post_title = get_post_meta( $post->ID, \'aps_display_post_title\', true );
<input type="checkbox" name="aps_display_post_title" value="yes" <?php checked( $aps_display_post_title, \'yes\'); />
}
在保存功能中保存metabox数据的代码:
function aps_meta_save( $post_id ) {
// Perform checking for before saving
$is_autosave = wp_is_post_autosave($post_id);
$is_revision = wp_is_post_revision($post_id);
$is_valid_nonce = (isset($_POST[\'aps_meta_save_nounce\']) && wp_verify_nonce( $_POST[\'aps_meta_save_nounce\'], \'aps_meta_save\' )? \'true\': \'false\');
if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
// Is the user allowed to edit the post or page?
if ( !current_user_can( \'edit_post\', $post_id )) return;
$aps_display_post_title = (isset($_POST[\'aps_display_post_title\']))? sanitize_text_field( $_POST["aps_display_post_title"] ): \'\' ;
update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title);
}
// save only when aps post slider posttype is saved
add_action( \'save_post_apspostslider\', \'aps_meta_save\');
我在保存时尝试了以下代码,但在这种情况下,默认选中了复选框。但当我取消选中并保存帖子时,复选框仍处于选中状态。
$aps_display_post_title = (isset($_POST[\'aps_display_post_title\']))? sanitize_text_field( $_POST["aps_display_post_title"] ): \'yes\' ;
update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title);
UPDATE: 更换挂钩后,一切正常。当新创建或更新帖子时,save\\u post挂钩将运行。因此,保存元数据的函数将在创建帖子时运行,因此默认值将保存在数据库中。然而,现在在将钩子更改为“edit\\u post”之后,一切都正常了。多亏了兄弟
majick 谁帮助了我。所有工作代码如下所示:
//Show meta box
function aps_add_meta_box() {
add_meta_box(
\'aps_metabox\',
__( \'Slider Settings & Shortcode Generator\', APS_TEXTDOMAIN ),
\'aps_metabox_cb\',
\'apspostslider\',
\'normal\'
);
}
add_action( \'add_meta_boxes\', \'aps_add_meta_box\' );
/**
* Prints the box content.
*/
function aps_metabox_cb( $post ) {
// Add a nonce field so we can check for it later.
wp_nonce_field( \'aps_meta_save\', \'aps_meta_save_nounce\' );
$aps_display_post_title = get_post_meta( $post->ID, \'aps_display_post_title\', true );
<input type="checkbox" name="aps_display_post_title" value="yes" <?php if ($aps_display_post_title != \'no\') { echo \'checked\'; }?>/>
}
// Save or Update metabox data
function aps_meta_save( $post_id, $post ) {
if ($post->post_type != \'apspostslider\') {return;}
// Perform checking for before saving
$is_autosave = wp_is_post_autosave($post_id);
$is_revision = wp_is_post_revision($post_id);
$is_valid_nonce = (isset($_POST[\'aps_meta_save_nounce\']) && wp_verify_nonce( $_POST[\'aps_meta_save_nounce\'], \'aps_meta_save\' )? \'true\': \'false\');
if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
// Is the user allowed to edit the post or page?
if ( !current_user_can( \'edit_post\', $post_id )) return;
if ( (isset($_POST[\'aps_display_post_title\']))
&& ($_POST[\'aps_display_post_title\'] == \'yes\') ) {
$aps_display_post_title = \'yes\';
} else {$aps_display_post_title = \'no\';}
update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title);
add_action( \'edit_post\', \'aps_meta_save\', 10, 2);