修改可用模板(在下拉列表中)

时间:2018-05-03 作者:roob1n

我正在用几个模板开发WordPress主题。一个模板称为“选项卡”。如果指定了此模板的页面具有子页面,则其部分内容将显示在父页面的选项卡中。因此,我只想为子页面允许某些模板。

在某些情况下,是否可以修改可用模板的列表(下拉列表)?是否有一个钩子来实现这一点?

我的筛选器/操作应该如下所示(伪代码):

if(parent_page->template == \'tabs\')
   remove template != \'tab-content\'

2 个回复
SO网友:cjbj

可用模板列表由生成get_page_templates. 此函数结束时,您将看到一个允许您修改输出的过滤器。您可以在以下特定条件下使用该选项进行更改:

add_filter (\'theme_page_templates\',\'wpse302574_conditional_templates\', 10, 4);

function wpse302574_conditional_templates ($post_templates, $this, $post, $post_type) {
  $parent_id = wp_get_post_parent_id ($post->ID);
  if (get_page_template_slug ($parent_id) == \'slug_of_your_parent_template\') {
    // remove unwanted templates from $post_templates
    }
  return $post_templates;
  }
(我没有测试此代码,可能需要进行一些调试)

SO网友:Bikash Waiba

你可以这样做

function wpdocs_filter_theme_page_templates( $page_templates, $this, $post ) {

      $parent_id = wp_get_post_parent_id( $post->ID );

      $parent_template = get_page_template_slug( $parent_id );

      if( \'template-parent.php\' === $parent_template ){ // compare parent template

        foreach ($page_templates as $key => $value) {

          if( \'template-child.php\' != $key ){ // compare child template

            unset( $page_templates[$key] ); // This will unset all the template except default template and child template

          }
        }

      }

      return $page_templates;
  }
  add_filter( \'theme_page_templates\', \'wpdocs_filter_theme_page_templates\', 20, 3 );
请参见https://developer.wordpress.org/reference/hooks/theme_page_templates/

结束