木材插件(Twig)在索引页面中不显示自定义类型的帖子

时间:2014-09-20 作者:A. Z.

Timber 不在索引页中显示自定义类型的帖子。

index.php:

$context = Timber::get_context();
$context[\'posts\'] = Timber::get_posts();
$context[\'foo\'] = \'bar\';
$templates = array(\'index.twig\');
if (is_home()){
  array_unshift($templates, \'home.twig\');
}
Timber::render($templates, $context);

functions.php:

function register_post_types(){
  register_post_type( \'test\',
    array(
      \'labels\' => array(
        \'name\' => __( \'test\' ),
        \'singular_name\' => __( \'test\' )
      ),
      \'public\' => true,
    )
  );
}
我的代码有什么问题?

1 个回复
最合适的回答,由SO网友:mrwweb 整理而成

在我们开始之前,有几个简短的注意事项:

我认为这不是木材问题。(如果是的话,第三方插件/主题帖子是本论坛的热门话题。)register_post_types(). 你永远不知道WordPress什么时候可能会引入这样的功能,它的通用性足以让其他插件或主题也会想到使用它。因此,为了避免冲突,您应该始终使用缩写或客户端accronym作为函数的前缀,或者,如下面的答案所示,您的WPSE问题#!如果你的帖子类型也很常见(如个人、企业或项目),那么也给它的slug加一个前缀index.php 如果home.php 文件不存在。

但是,如果您只希望自定义帖子类型显示在帖子页面上,则可以使用pre_get_posts! 这与您的register_post_type() 作用

function wpse162065_pre_get_posts( $query ) {
    if( is_home() && is_main_query() ) {
        $query->set( \'post_type\', array( \'post\', \'test\' ) );
    }
}
add_action( \'pre_get_posts\', \'wpse162065_pre_get_posts\' );

结束

相关推荐