仅显示默认页面模板的元框

时间:2021-07-17 作者:Mathieu Préaud

我的一个元盒有问题。我希望元框仅显示在默认页面模板编辑上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,则会正常工作。

2 个回复
最合适的回答,由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\');
 }
}

SO网友:Morteza Mohammadi

试试这个代码,我想它应该能正常工作

add_action(\'add_meta_boxes\', \'page_add_meta_boxes\');
function page_add_meta_boxes(){
    global $post;
    if(!empty($post)):
        $pageTemplate = get_post_meta($post->ID, \'_wp_page_template\', true);
        $pageTemplate = ($pageTemplate == "page.php" || empty($pageTemplate) || $pageTemplate == " " || $pageTemplate == "default" )?true:false;
        if($pageTemplate):
            add_meta_box(
                    \'page-repeatable-fields\',
                    \'Index\',
                    \'page_repeatable_meta_box_display\',
                    \'page\',
                    \'normal\',
                    \'low\'
                )
        endif;
    endif;
}

相关推荐

PHP函数中的字符串偏移量非法

我正在创建一个元盒来上载PDF文件。对于这一行代码,我有以下警告通知:$this_file = $filearray[\'url\'];警告:中的字符串偏移量“url”非法完整的功能代码:function wp_custom_attachment() { wp_nonce_field( plugin_basename(__FILE__), \'wp_custom_attachment_nonce\' ); $html = \'<p class="descri