如何拥有两个不同版本的标签/类别/分类存档页面?

时间:2011-08-12 作者:supertrue

我有一个网站有两种不同的内容:更正式的内容(使用各种不同的自定义帖子类型)和博客(使用博客帖子类型)。这两个不同的内容体使用相同的分类法,但我希望有两个不同版本的分类法档案:一个用于正式内容,另一个用于博客内容。

例如,对于一个术语science 在分类学中subjects 两样我都要

  • mysite.com/subjects/sciencemysite.com/blog/subjects/science (或mysite.com/subjects/science/blog)
2 个回复
最合适的回答,由SO网友:supertrue 整理而成

目前我的解决方案是使用GET变量请求不同的页面模板:

常规版本的分类页面:mysite。com/subjects/science博客版的分类法页面:mysite。com/主题/科学?view=blog来处理?view=blog变量,我将此条件添加到分类法的顶部。php(或taxonomy-subjects.php和任何其他分类法{slug},我想有一个替代版本):

 /****************************************************
   Tell Wordpress to fetch a different 
   template if our URL ends in ?view=blog
 ****************************************************/

$view = $_GET["view"]; 

if ( $view == "blog" ) {
    get_template_part( \'blog-archive\' );
    exit();
}
然后,在博客存档中。php模板中,我调整了$wp\\u query的query\\u vars,以输出一个只包含博客帖子的循环。

// adjust $wp_query->query_vars to taste
$newloop = array_merge( $wp_query->query_vars, array( \'post_type\' => \'blog\', \'posts_per_page\' => 5 )); 

$the_query = new WP_Query ($newloop);

while ( $the_query->have_posts() ) : $the_query->the_post();

    //output your posts however you like

endwhile;
wp_reset_postdata();
目前这对我很有效;唯一不幸的是URL显示了什么?视图=博客,而不是尼斯/博客。我从下面的答案中借用了主要的$\\u GET[]想法:How can I dynamically load another page template to provide an alternate layout of the posts?. (我想知道使用$the\\u query=$wp\\u query->set(\'post\\u type\',\'blog\')是否可以更直观地实现后者);但这似乎将$the\\u查询变成了一个非对象,并给出了一个错误。)

SO网友:Wyck

简单的方法(虽然不是唯一的方法)是只使用默认的归档层次结构。phphttp://codex.wordpress.org/Template_Hierarchy

因此,对于您的博客档案,请使用archives.php 或基于分类法的模板,如taxonomy-subject.php.无论何种情况,您都需要更改循环查询,以仅显示在默认博客(post)中发布的分类法“主题”中术语“科学”的帖子。

然后,对于自定义的帖子类型存档,您可以创建一个名为archive-{post_type}.php (post type是您注册CPT的名称)。您基本上可以执行与上面相同的自定义查询,但只包括自定义帖子类型中的帖子(并且没有来自博客的帖子)。

这是您需要熟悉的自定义查询,http://codex.wordpress.org/Class_Reference/WP_Query#Type_.26_Status_Parameters

结束

相关推荐

Enable page templates. How?

基本问题,但我想启用页面模板。我有一个启用了页面模板的主题。我切换到了另一个模板,但没有更改模板的选项,即使在创建新页面时也是如此。如何打开此选项?我在抄本和论坛上找到了根,但找不到。