我的一个元盒有问题。我希望元框仅显示在默认页面模板编辑上page.php
.
编辑页面上不会显示元框。
add_action(\'add_meta_boxes\', \'page_add_meta_boxes\', 1);
function page_add_meta_boxes() {
global $post;
if(!empty($post)) {
$pageTemplate = get_post_meta($post->ID, \'_wp_page_template\', true);
if($pageTemplate == \'page.php\') {
add_meta_box( \'page-repeatable-fields\', \'Index\', \'page_repeatable_meta_box_display\', \'page\', \'normal\', \'low\');
}
}
}
谢谢你。
EDIT
根据@SallyCJ的评论更新了代码
add_action(\'add_meta_boxes\', \'page_add_meta_boxes\', 10, 2);
function page_add_meta_boxes($post_type, $post) {
if(!empty($post)) {
$pageTemplate = get_post_meta($post->ID, \'_wp_page_template\', true);
if(in_array( $pageTemplate, array( \'default\', \'page.php\' ) ) ) {
add_meta_box( \'page-repeatable-fields\', \'Index\', \'page_repeatable_meta_box_display\', \'page\', \'normal\', \'low\');
}
}
}
在检查之后
var_dump( $pageTemplate );
结果是:
"String(0) "" "
注意:如果使用自定义模板页面来显示metabox,则会正常工作。
最合适的回答,由SO网友:Sally CJ 整理而成
如果默认模板;选项,然后WordPress将设置_wp_page_template
元到default
而不是page.php
, 因此,这很可能是您的元框未显示/添加的原因。
所以我会用if ( in_array( $pageTemplate, array( \'default\', \'page.php\' ) ) )
而不是if ( $pageTemplate == \'page.php\' )
.
此外,我还将使用$post
变量,该变量可用作second parameter 对于元框功能:
add_action(\'add_meta_boxes\', \'page_add_meta_boxes\', 10, 2); // require the 2nd parameter
function page_add_meta_boxes($post_type, $post) { // and define it in the function head
//global $post; // <- no need to do this
// your code
}
<如果元值为空,则更新(
\'\'
), 然后模板将是默认的,例如。
page.php
对于
page
岗位类型。
所以你可以if ( ! $pageTemplate || in_array( $pageTemplate, array( \'default\', \'page.php\' ) ) )
而不是我上面建议的。
或者实际上,你可以get_page_template_slug()
这要容易得多。:)基于更新代码的示例:
function page_add_meta_boxes($post_type, $post) {
$pageTemplate = get_page_template_slug( $post );
if(! $pageTemplate || \'page.php\' === $pageTemplate) {
add_meta_box( \'page-repeatable-fields\', \'Index\', \'page_repeatable_meta_box_display\', \'page\', \'normal\', \'low\');
}
}