如何保持添加新帖子默认选中自定义帖子类型的自定义元框中的复选框?

时间:2013-11-21 作者:Maruti Mohanty

在我的自定义插件中,我有一个自定义的帖子类型和一个自定义的元框。我有几个字段,其中一个是复选框。我希望在选择时默认选中此复选框add new post 然后继续选择用户ie已选中/未选中。

我正在添加相关代码,即:用于metabox以及如何保存它。

function coupon_add_metabox() {
    add_meta_box( \'coupon_details\', __( \'Coupon Details\', \'domain\' ), \'wpse_coupon_metabox\', \'coupons\', \'normal\', \'high\' );
}

function wpse_coupon_metabox( $post ) {

    // Retrieve the value from the post_meta table
    $coupon_status   = get_post_meta( $post->ID, \'coupon_status\', true );

    // Checking for coupon active option.
    if ( $coupon_status ) {
        if ( checked( \'1\', $coupon_status, false ) )
            $active = checked( \'1\', $coupon_status, false );
    }

    // Html for the coupon details
    $html = \'\';

    $html .= \'<div class="coupon-status"><label for="coupon-status">\';
    $html .= __( \'Active\', \'domain\' );
    $html .= \'</label>\';
    $html .= \'<input type="checkbox" id="coupon-status-field" name="coupon-status-field" value="1"\' . $active . \' /></div>\';

    echo $html;
}

function wpse_coupons_save_details( $post_id ) {
    // If this is an autosave, our form has not been submitted, so we don\'t want to do anything.
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
        return $post_id;

    // Check the user\'s permissions.
    if ( ! current_user_can( \'activate_plugins\' ) )
        return $post_id;

    $coupon_status   = sanitize_text_field( $_POST[\'coupon-status-field\'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, \'coupon_status\', $coupon_status );
}
add_action( \'save_post\', \'wpse_coupons_save_details\' );

2 个回复
最合适的回答,由SO网友:Subharanjan 整理而成

save_post 被多次调用是预期的行为,但由于它的使用方式,在用户实际单击“保存”按钮之前,您可能并不总是希望代码执行。就像你上面提到的关于你的要求。

因此,您可以查看当前页面(即post-new.php ) 在wp admin中,可以根据该设置条件。下面是您可以实现的方法。

global $pagenow;

// Checking for coupon active option.
if ( $coupon_status ) {
    if ( checked( \'1\', $coupon_status, false ) )
        $active = checked( \'1\', $coupon_status, false );
}

if ( \'post-new.php\' == $pagenow ) {
    $active = \'checked\';
}
=======或者你也可以检查一下============

if( ! ( wp_is_post_revision( $post_id) && wp_is_post_autosave( $post_id ) ) ) {
    // do the work that you want to execute only on "Add New Post"
} // end if

It’s worth understanding Why It Happens & what\'s goes on behind the scenes of save_post:

<帖子在创建和起草时都会经过自动保存过程。因此,当用户起草帖子时,save\\u post实际上会被激发多次-

SO网友:Joey Yax

如果帖子是新的get_post_meta( $post->ID, \'coupon_status\' ) 将是null. 保存并取消选中自定义字段后,它将是empty 字符串(""). 因此,您应该能够为null 值:

if ( checked( \'1\', $coupon_status, false ) || $coupon_status == null ) {
    $active = \'checked\';
}

结束

相关推荐

Metabox Input Not saving

我已经有很长一段时间没有做过任何元框了,所以我很快就为我正在开发的网站做了这个元框。我的问题是,当我在框中输入一些文本并点击“保存”时,文本会消失,所以我只剩下空文本框,没有保存的数据。我猜这和我的save_post 作用更新*现在标题字段可以工作,但内容字段不能工作。//intialising the metabox and using the callback function add_action( \'add_meta_boxes\', \'owl_mb_cr