更改子类别存档页面的URL结构

时间:2019-07-30 作者:Jascha Goltermann

我的永久链接结构如下:/%category%/%postname%/

这将生成如下URL:mysite.io/category/sub-category/post-name

没关系。但是archive page 的URLsub类别如下:mysite.io/sub-category

相反,的URLsub类别应如下所示:mysite.io/category/sub-category

此类别类型实际上是由父主题注册的自定义分类法。我认为不可能使用管理仪表板中的permalink设置来更改此功能的URL结构,但也许我可以为这些功能添加一些内容。php更改注册的分类法?

我在WordPress codex中找到了这一页,并认为它可能有助于找到解决方案,但我的WordPress知识似乎太有限,无法理解如何:

“分层”-true或false允许分层URL(在版本3.1中实现)-默认为false

Function Reference/register taxonomy

提前感谢

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

你自己回答了自己的问题。

您希望自定义类别的链接如下所示

{taxonomy_slug}/{parent_term}/{child_term}/{grandchild_term}/
因此,您应该注意register_taxonomy() 参数:hierarchicalrewrite.

$args = [
    \'hierarchical\' => true,      // <-- term may have a parent
    \'labels\'       => $labels,
    \'rewrite\'      => [
        // hierarchical urls, defaults to FALSE
        \'hierarchical\' => true,  // <-- 
    ]    
];
您的自定义分类是由父主题创建的,因此要更改它,请使用register_taxonomy_args 过滤器:

add_filter( \'register_taxonomy_args\', \'se344007_mytax_args\', 10, 2 );
function se344007_mytax_args( $args, $taxonomy )
{
    if ( \'mytax\' !== $taxonomy ) {
        return $args;
    }    
    // it looks like it\'s already set up by parent theme
    // $args[\'hierarchical\'] = true;

    if ( !is_array($args[\'rewrite\']) )
        $args[\'rewrite\'] = [];
    $args[\'rewrite\'][\'hierarchical\'] = true;

    return $args;      
}
注册自定义分类法时,指向术语(自定义类别)的默认链接为{taxonomy_slug}/{child_term_slug} 即使分类法是分层的,因为默认情况下,创建的链接不是分层的($args[\'rewrite\'][\'hierarchy\']=false)。

SO网友:Antti Koskinen

是否有一些钩子可以用来更改已注册的分类法?

是的,有register_taxonomy_args 过滤器,可用于修改已注册的分类法。

function prefix_register_taxonomy_args_my_taxonomy( $args, $taxonomy, $object_type ) {    
  if ( \'my_taxonomy\' !== $taxonomy ) {
    return $args;
  }

  $args[\'hierarchical\'] = true; // have descendants, like categories

  if ( ! is_array( $args[\'rewrite\'] ) ) {
    $args[\'rewrite\'] = array(
      \'hierarchical\' => true, // allow hierarchical urls, defaults to false
    )
  }  

  return $args;      
}
add_filter( \'register_taxonomy_args\', \'prefix_register_taxonomy_args_my_taxonomy\', 10, 3 );

SO网友:G3N

我也有同样的问题,

mysite.io/category/sub-category/post-name 这就是我的目的post

mysite.io/sub-category 是我想要改变的

mysite.io/category/sub-category 是我想要的

我打赌你已经. 在设置中(>);permalink可选部分,将其删除并保留为空并保存。现在安装插件No Category Base (WPML)download it.

现在你可以检查你的链接了。

希望那里一切顺利。

相关推荐

Wordpress Permalinks

我在最近建立的网站上使用Wordpress Sydney主题。如果我将永久链接更改为post选项,我的网页链接将中断。对于不是技术大师的人来说,有没有简单的方法来解决这个问题。任何(详细的)帮助都将不胜感激。