在我的自定义插件中,我有一个自定义的帖子类型和一个自定义的元框。我有几个字段,其中一个是复选框。我希望在选择时默认选中此复选框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\' );
最合适的回答,由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实际上会被激发多次当用户单击“Save”(保存)或“Publish”(发布)时,函数将启动,从而开始调用另一轮函数最后,值得注意的是,edit\\u post函数只会触发一次,但只有在用户实际编辑了现有帖子时才会触发-