考虑一下,当您添加一个元盒时,没有什么强迫您在post meta字段中保存值,您也可以从元盒中保存一个全局选项。
function my_add_custom_box() {
$screens = array( \'post\' ); // add or replace with your cpt name
foreach ( $screens as $screen ) {
add_meta_box(
\'my_sectionid\', __( \'Featured Monthly Product\', \'my_textdomain\' ), \'my_inner_custom_box\',
$screen
);
}
}
add_action( \'add_meta_boxes\', \'my_add_custom_box\' );
function my_inner_custom_box( $post ) {
wp_nonce_field( \'my_inner_custom_box\', \'my_inner_custom_box_nonce\' );
$value = (int) get_option( \'featured_monthly_product\') === (int) $post->ID ? 1 : 0;
echo \'<label for="featured_monthly_product">\';
_e( "Is this the Featured Monthly Product?", \'my_textdomain\' );
echo \' <input type="checkbox" name="featured_monthly_product" value="1"\' . checked(1, $value, false) . \' />\';
echo \'</label> \';
}
function my_save_post_option( $post_id ) {
$nonce = filter_input(INPUT_POST, \'my_inner_custom_box_nonce\', FILTER_SANITIZE_STRING);
if ( ! $nonce ) return $post_id;
if ( ! wp_verify_nonce( $nonce, \'my_inner_custom_box\' ) ) return $post_id;
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return $post_id;
$checked = (int) filter_input(INPUT_POST, \'featured_monthly_product\', FILTER_SANITIZE_NUMBER_INT);
if ($checked > 0) {
update_option( \'featured_monthly_product\', $post_id );
} elseif ( (int) $post_id === (int) get_option(\'featured_monthly_product\') ) {
delete_option(\'featured_monthly_product\');
}
}
add_action( \'save_post\', \'my_save_post_option\' );
您没有解释要在该自定义值上保存什么,所以我猜您想存储post ID,如果不想,请相应地更改代码。
上面的代码显示了一个带有复选框的元框。保存帖子时,如果选中该复选框,则当前帖子id将保存到选项中featured_monthly_product
.
如果复选框未选中,并且帖子是特色月度产品,则该选项将被删除。
如果要全球化该价值,请使用
add_action(\'init\', \'globalize_featured_monthly_product\');
function globalize_featured_monthly_product() {
global $featured_monthly_product;
$featured_monthly_product = get_option(\'featured_monthly_product\');
}
之后,无论您在哪里需要特色月度产品id,只需使用:
global $featured_monthly_product;
// just an example:
echo "The featured monthly product id is: " . $featured_monthly_product;