存在多个类别时按类别发送到不同的单页

时间:2017-01-08 作者:Daniel Sagi

我的帖子可以有两个类别中的任何一个:1。红色2。蓝色

我有两个不同类别的页面,一个是红色。PHP类别蓝色。php

帖子可以同时为红色和蓝色类别

如果一篇文章是从红色类别打开的,我希望它有一个单一的红色样式,即使它也属于蓝色类别。

这可能吗?

3 个回复
SO网友:CoderScissorhands

我想你能做的就是if/else 索引中的语句。php调用单个。php文件作为模板部件重要的是,您希望将关节条件(蓝色和红色)作为条件列表中的第一个条件single-red.php 鼻涕虫会\'single-red\' , 没有.php.

控制三种可能性

if ( in_category(\'red\') && in_category(\'blue\') ) {
     get_template_part( \'single-red\' ); //both
} elseif ( in_category(\'red\') ) {
    get_template_part( \'single-red\' );  //just red
} else {
    get_template_part( \'single-blue\' ); // just blue
    
}
或者更优雅地说,如果你不想只跟踪红色:

仅控制两种可能性

if ( in_category(\'red\') ) {
     get_template_part( \'single-red\' ); // just red OR blue and red
} elseif ( in_category(\'blue\'){
    get_template_part( \'single-blue\' ); //just blue
    
}
请注意,您应该调整if语句,以处理您希望它分析的类别。如果你只有“红色”和“蓝色”两个类别,那么你就不需要最后的“else”。但是,如果你的帖子既不是“红色”,也不是“蓝色”,并且你希望它们的样式不同于红色和蓝色,那么你可能想做一些我在下面展示的事情。请注意,您需要第三个php文件,用一个slug“single”(如single.php)调用,这样才能工作:

处理第三个不同于其他两个的默认类别

if ( in_category(\'red\') ) {
     get_template_part( \'single-red\' ); // just red OR blue and red
} elseif ( in_category(\'blue\'){
    get_template_part( \'single-blue\' ); //just blue
} else {
    get_template_part( \'single\' ); // default single
    
}
还要注意的是,我在上面的代码中只为“in\\u category”使用了单参数if语句条件。我的意思是,在函数中;在“类别”中;,我只进入了“红色”或“蓝色”类别。如果您是;循环“;,但如果您不在循环中,则可能需要使用Codex建议的方法,使用两个参数,将帖子传递到函数“in\\u category”。因此,如果你不在循环中,你应该确保你有一个变量来存储你的帖子(例如。$post), 然后用这样的东西in_category(\'red\', $post);in_category(\'red\', $post->ID); 而不是简单地in_category(\'red\').

我希望这能拉近你的距离!请尝试一下,如果遇到任何问题,请告诉我!

SO网友:Celso Bessa

在我看来,您需要向单个模板发出信号,说明哪个类别存档发送了使用和更改单个元素的类(例如body类)。

我想到的主要可能性是

在类别档案的链接中添加一个变量,single读取该变量并分配适当的类,single从post请求中获取引用人,并根据该变量分配适当的类。在第一种情况下,您可以使用WordPressadd_query_argget_query_var 函数创建和读取自定义查询变量。

在第二种情况下,您可以利用wp_get_referer, wp_get_original_referer 甚至PHP[$_SERVER\\[\'HTTP_REFERER\'\\]]5

请注意,仅使用PHP更改HTML标记会使页面缓存更加困难。您可以通过检查[document.referrer]6 (这说明the origin URL, that you can parse) 并使用脚本应用该类。

SO网友:Naveen

如果您使用的是Wordpress,那么您可以在一个页面上同时使用这两个类别,只需定义主类别即可。例如,如果将“红色”一词定义为主要类别,“蓝色”一词定义为次要类别,则子页面将显示在这两个类别上。唯一的区别是URL结构和面包屑流将遵循“红色”类别的路径,即使您通过“蓝色”类别,它也将根据“红色”类别一显示URL结构和面包屑,这不会产生任何重复问题。最后,但并非最不重要的一点是,搜索引擎爬虫将按照面包屑导航的路径爬行,这意味着爬网将在“红色”类别中爬行。

相关推荐

在循环外部调用is_Single()

所需的文件不会加载到单个帖子上,也不会加载到任何地方!如果我删除is_single() 功能我可以让它工作。我的问题是如何检查当前页面是否为帖子?我看了其他问题,看起来我调用的是循环外的函数,但无论我在这些答案中尝试什么都不起作用!!你会怎么处理?谢谢class Something { function my_func() { if ( is_single() ) { require_once( \'/lib/control