为什么这不起作用,一个非常广泛的答案是the internet is stateless. 基本上,每个页面请求都是一个与其他页面请求不同的独立实例。
例如post-1 在中category-1 和category-2.
Wordpress加载时post-1 在…上single.php
它无法知道用户是如何到达页面的。它只知道category-1 和category-2 与职位关联。
无法获取“当前类别”,因为它已不在类别中。
这种行为还会造成Wordpress中面包屑的混淆。用户的面包屑路径可能如下所示。
Step 1. Home
Step 2. Home->category-1
Step 3. Home->post-1
预期的行为通常是最后一步是这样的。
Step 3. Home->category-1>post-1
但如果这能奏效,那么这也会奏效。
Step 3. Home->category-2->post-1
这对搜索引擎来说是不好的,因为现在同一篇文章有两个不同的URL。
但是,如果你真的想显示用户来自的类别,你可以尝试这样的方法。请记住,internet是无状态的,因此您需要一种将信息从一个页面传递到另一个页面的方法。
类别模板打开category.php
您可以将permalink更改为单篇文章,并以以下形式包含查询字符串参数?category=id
. 可能看起来像这样。
<?php
$cat_obj = get_category( get_query_var( \'cat\' ) );
$cat_id = ( $cat_obj ? $cat_id = $cat_obj->term_id : $cat_id = \'\' );
?>
<a href="<?php echo get_permalink() . \'?c=\' . $cat_id ?>"><?php the_title(); ?></a>
你的永久链接现在应该是这样的
?c=19
附加到正常永久链接。
http://www.example.com/post-name/?c=19
单模板
在单模板上。php您需要从查询字符串中获取类别ID,获取类别名称,然后显示在页面上。其代码可能如下所示。
您需要检查是否设置了查询字符串参数。如果是,请使用esc_html()
为了安全起见,需要对其进行清理,然后检查以确保它是数字,而不是像“废话”这样的东西。
验证完成后,在页面上获取类别名称和输出。
if ( isset( $_GET[\'c\'] ) ) {
$cat_id = (integer) esc_html( $_GET[\'c\'] );
if ( is_numeric( $cat_id ) ) {
$cat_obj = get_category($cat_id);
$cat_name = $cat_obj->name;
echo \'<span>\' . $cat_name . \'</span>\';
}
}
注意事项
如果查询字符串参数不存在,则不会显示类别。用户可以通过多种方式到达单个贴子页面,这只处理非常特定的用例。
如果搜索引擎发现有多个指向完全相同内容的唯一URL,这也可能对SEO产生负面影响。