php - 有没有办法在 Wordpress 上创建重复的子类别 slug?

标签 php wordpress categories slug

我疯狂地搜索了这个问题,但似乎找不到这个问题的不太过时的答案或实际有效的东西。

我的问题就像这个人在这个论坛帖子中描述的那样(来自 4 年,4 年前!): https://wordpress.org/support/topic/duplicate-subcategory-slug-problem

我目前使用的是最新版本 Wordpress 4.1,我想要实现的目标是:

假设我的网站上有 2 个类别,分别称为BootsShoes。 在它们里面,我想创建一个名为 Red 的类别。这就是我的类别结构当时的样子:

 - Boots // -> URL: http://example.com/boots
 | ----- Red // -> URL: http://example.com/boots/red (GREAT!)

 - Shoes // -> URL: http://example.com/shoes
 | ----- Red // -> URL: http://example.com/shoes/red-shoes (cmon, wp, nooo !)

当我想要实现的是:

 - Boots // -> URL: http://example.com/boots
 | ----- Red // -> URL: http://example.com/boots/red

 - Shoes // -> URL: http://example.com/shoes
 | ----- Red // -> URL: http://example.com/shoes/red

这样就完美了!!!

如果你想知道,是的,我知道这只是 wordpress 的一部分,他们不想改变它,我理解为什么和所有爵士乐,是的。 但是对于这个特定的项目,我真的需要这个。

我想我可能不得不改变核心,如果我这样做就无法更新 Wordpress,我知道,但如果需要的话我对此没有问题。

但是如果有另一种方法来构成这个不涉及类别并且不破坏我的 URI 的层次结构,我也可以尝试。感谢任何帮助或提示,非常感谢!

最佳答案

我的分类法也遇到了同样的问题,我刚刚修复了它,希望它能有所帮助。

首先,您有父类分类法,当您创建子类时,您必须确保将父 slug 添加到子类别 slug 中。在您的示例中,它看起来像:

  • Boot -红色
  • Boot -蓝色
  • 鞋子-红色
  • 鞋子-蓝色

这是为了让每个子类别都有一个独特的 slug。

现在是重要的事情,重写规则和分类链接:

当你定义分类时,你应该这样做:

register_taxonomy('mytaxonomy',array('mycustompost'), array(
    'hierarchical'      => true,
    'sort'              => true,
    'labels'            => $labels,
    'show_ui'           => true,
    'show_admin_column' => true,
    'query_var'         => true,
    'rewrite'     => array(
      'slug'        => '/%parent%'
    )
  ));

此外,您必须修改永久链接,使其具有您需要的结构,如果它是自定义分类法(如我的情况),您可以使用 term_link 过滤器进行修改。我的函数如下所示:

function mytaxonomy_link( $permalink, $term, $taxonomy )
{
  if ( $taxonomy !== 'mytaxonomy'  && false === strpos( $permalink, '%parent%' ) )
      return $permalink;

  $temp_padre = $term->parent;
  $padre = get_term_by('id', $temp_padre, 'mytaxonomy');



  $cat_name = 'general';
  if(isset($padre) && !empty($padre))
  {
    $cat_name  = $padre->slug; 
    $termslug  = $term->slug;
    $new_slug  = str_replace( $cat_name , '' , $termslug);
    $new_slug  = ltrim($new_slug, '-');

    $permalink  = str_replace( '%parent%' , $cat_name , $permalink );
    $permalink  = str_replace( $termslug , $new_slug , $permalink );

  }

  return $permalink;    
}

add_filter( 'term_link', 'mytaxonomy_link', 10, 3 );

此函数会将子类别链接转换为:http://example.com/boots/red

重写规则让一切变得神奇:

  add_rewrite_rule('([^/]+)/([^/]+)/?$', 'index.php?mytaxonomy=$matches[1]-$matches[2]','top');
  add_rewrite_rule('([^/]+)/([^/]+)', 'index.php?mytaxonomy=$matches[1]-$matches[2]','top');

在我的例子中,我的帖子/分类法关系要复杂得多,但我认为这个解决方案会对你有所帮助。

希望这会有所帮助,因为我在尝试找到解决此问题的过程中遇到了非常糟糕的时间。

关于php - 有没有办法在 Wordpress 上创建重复的子类别 slug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169931/

相关文章:

wordpress - 如何获取WordPress中特定类别下发布的所有帖子的ID

html - 为什么我的页脚不在页面底部?

CSS:在与容器宽度相同的文本小部件内创建链接

php - 在 Magento 中显示产品所属的所有类别

javascript - 涉及数组时限制选中的框数量

php - 使用 php 向谷歌地图添加静态 1km 网格

PHP:准备好的语句(新手)出现此错误

javascript - 使用 webpack.mix 编译 js 文件时,mix.scripts 在 laravel 5.5 上不起作用

php - 在 while 循环中获取当前帖子类别名称

php - 删除magento中的空类别