私のカスタムプラグインでは、私はカスタム投稿タイプを持ち、それに対するカスタムメタボックスを持っています。フィールドがほとんどありません。そのうちの1つがチェックボックスです。私はadd new post
に行き、次にユーザーの選択、すなわちオン/オフを選択したときにこのチェックボックスをデフォルトでチェックしたいと思います。
私は関連するコードを追加しています:メタボックスと私はそれをどのように保存しているのか。
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' );
save_post
が複数回呼び出されることは予想される動作ですが、その使用方法のため、ユーザーが実際に保存ボタンをクリックするまでコードを実行したくない場合があります。あなたがあなたの要求に関して上で述べたように。
だからあなたはwp-adminで現在のページ(すなわちpost-new.php
)をチェックし、それに基づいて条件を置くことができます。これが実装方法です。
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
なぜ起こるのか、そしてsave_postの舞台裏で何が起こっているのかを理解する価値があります。
投稿が新しい場合、get_post_meta( $post->ID, 'coupon_status' )
の値はnull
になります。保存すると、カスタムフィールドのチェックが外れたら、それはempty
文字列(""
)になります。だから、あなたはnull
値のチェックを追加することができるはずです:
if ( checked( '1', $coupon_status, false ) || $coupon_status == null ) {
$active = 'checked';
}