使用PRE_GET_POST更改存档页面模板

时间:2020-06-23 作者:Jim

我用过pre_get_post 要在使用自定义创建的存档模板分页的存档页面中修改和显示我的自定义帖子类型,请参阅here. 它显示的帖子正是我所需要的,然而,它似乎没有使用我的自定义模板。它使用的是默认模板,尽管我已经在页面设置中设置了自定义页面模板。就像this 在默认模板中时,应为this 使用自定义模板时。

每个人都知道在使用pre\\u get\\u post时如何将页面模板更改为自定义模板吗?

我已经尝试了在此上找到的archive\\u videos\\u template()自定义函数link, 你可以在这里看到image 但它不起作用。

请让我知道如果你有任何想法如何做到这一点,因为我想修改我的自定义帖子类型在一个页面模板。

谢谢

这是我在函数中的初始代码。php在带有分页的归档页面中显示自定义帖子类型,以及我试图更改页面模板的其他功能。

function post_type_videos( $query )
    {
      if ( ! is_admin() && is_post_type_archive( \'videos_cpt\' ) && $query->is_main_query() )
      {
        $query->set( \'post_type\', \'videos\' ); //set query arg ( key, value )
        $query->set( \'posts_per_page\', 2 ); //set query arg ( key, value )
        return $query;

        // custom page template
        add_filter( \'template_include\', \'archive_videos_template\', 99 );
      }
    }

    add_action( \'pre_get_posts\' ,\'post_type_videos\', 1, 1 );

    function archive_videos_template( $template )
    {
        $target_tpl = \'archive-videos_cpt.php\'; // EDIT to your needs

        remove_filter( \'template_include\', \'archive_videos_template\', 99 );

        $new_template = locate_template( array( $target_tpl ) );

        if ( ! empty( $new_template ) )
            $template = $new_template;;
    }

        return $template;
    }

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

已更正筛选器挂钩名称archive-videostemplate_include, 但在第一个函数中return $query;语句位于前面add_filter(), 因此不添加过滤器。

add_action( \'pre_get_posts\' ,\'post_type_videos\' );

function post_type_videos( $query )
{
    if ( ! is_admin() && $query->is_post_type_archive( \'videos_cpt\' ) && $query->is_main_query() )
    {
        $query->set( \'post_type\', \'videos\' ); //set query arg ( key, value )
        $query->set( \'posts_per_page\', 2 ); //set query arg ( key, value )

        // custom page template
        add_filter( \'template_include\', \'archive_videos_template\', 99 );

        return $query;
    }
}

function archive_videos_template( $template )
{
    remove_filter( \'template_include\', \'archive_videos_template\', 99 );

    $target_tpl = \'archive-videos_cpt.php\';
    $new_template = locate_template( array( $target_tpl ) );
    if ( ! empty( $new_template ) )
        $template = $new_template;;
    }

    return $template;
}

相关推荐