Wordpress 为自定义帖子类型存档页面选择了错误的模板

Posted

技术标签:

【中文标题】Wordpress 为自定义帖子类型存档页面选择了错误的模板【英文标题】:Wordpress Picks Up Wrong Template for Custom Post Type Archive Page 【发布时间】:2017-11-21 11:31:28 【问题描述】:

我已经注册了以下两种自定义帖子类型:

function dogs() 

    $labels = array(
        'name' => 'Dogs'
    );

    $args = array(
        'labels' => $labels, 
        'public' => true,
        'has_archive' => true,            
        'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' )
    );

    register_post_type( 'dog', $args );


function cats() 

    $labels = array(
        'name' => 'Cats'
    );

    $args = array(
        'labels' => $labels, 
        'public' => true,
        'has_archive' => true,
        'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' )
    );

    register_post_type( 'cat', $args );
 

在“狗”帖子类型 (mysite.com/dog) 的存档页面中,我想显示同时使用“狗”和“猫”帖子类型的帖子。所以我创建了一个名为archive-dog.php 的自定义模板,并像这样更改了主查询:

add_action( 'pre_get_posts', 'cats_and_dogs' ) );

function cats_and_dogs( $query ) 
    if( ! is_admin() && is_post_type_archive( 'dog' ) ) 
        if( $query->is_main_query() )   
            $query->set( 'post_type', array( 'dog', 'cat'  ) );
            $query->set( 'posts_per_page', 4 );
            $query->set( 'post_status', 'publish' );  
            $query->set( 'post__not_in', get_option( 'sticky_posts' ) ); 
         
             

当我访问 mysite.com/dog 时,我希望 Wordpress 会自动选择 archive-dog.php 并显示“狗”和“猫”的帖子。相反,虽然它确实显示了“狗”和“猫”的帖子,但它并没有选择archive-dog.php,而是回退到archive.php。如果我从更改后的主查询中删除“猫”帖子类型,只留下“狗”,一切正常。我怎样才能同时拥有两种帖子类型我的自定义存档模板?

【问题讨论】:

我不认为archive-dog.php与更改的查询有任何关系,尝试更新一次永久链接,它可能正常工作,未经测试,只是一个假设。 【参考方案1】:

将下面的代码放在你的functions.php中并享受吧:

add_filter( 'template_include', 'use_archive_dog', 99 );
function use_archive_dog( $template ) 

    if ( is_post_type_archive('dog')  ) 
        $new_template = locate_template( array( 'archive-dog.php' ) );
        if ( '' != $new_template ) 
            return $new_template ;
        
    

    return $template;

【讨论】:

以上是关于Wordpress 为自定义帖子类型存档页面选择了错误的模板的主要内容,如果未能解决你的问题,请参考以下文章

在 Wordpress 中为自定义帖子类型添加附加页面

WordPress 自定义帖子类型存档-<帖子类型>.php 不起作用

Wordpress - 自定义帖子类型存档页面

Wordpress 在自定义帖子类型存档页面上按日期排序

如何为自定义帖子和分类法制作 Wordpress 存档页面?

自定义帖子类型等效于 Wordpress 中的“帖子页面”设置