WP_LIST_CATEGORIES在有子类别的类别上没有链接的WP_LIST_CATEGORYS漫游(以创建嵌套下拉菜单)

时间:2020-11-05 作者:EdA

我想做一个与wp_list_categories 生成嵌套菜单的步骤uls使用我的类别、子类别和子类别(?)结构任何具有子类别的类别都不能是链接,因此可以单击它以显示子类别(或子类别)。

以下是我想要的(只有带有a的项目才应该是链接):

Tops
  Shirts
    T-shirts 
    Longsleeves 
  Jackets
    Hoodies 
    Raincoats 
Shoes
  Boots 
  Formal 
Trousers
  Shorts 
  Longs 
Bags 
另请参见此CodePen demo with the hard-coded HTML I\'d like to generate, 理想情况下,使用定制助行器wp_list_categories.

我需要在一系列嵌套的uls、 如果给定类别有子类别,则该类别can\'t 显示为链接(adiv 或类似)我的菜单系统最多有三个层次,没有后代的类别可能在任何地方。我真正想使用的原因wp_list_categories 因此,我的编辑器可以灵活地重新排序类别。如果我在每个顶级类别中硬编码,他们就无法使用WP的内置类别编辑器对它们进行自由重新排序。

Goal: Right now, wp_list_categories does output my categories properly. I just need to figure out how to override the code that is making category titles with subcategories be links. I need them to just be plain text.

我试图自己制作一个定制的助行器,但似乎不知道它在哪里决定一个类别是sub(还是sub的sub)为了省略不需要的链接。

1 个回复
最合适的回答,由SO网友:Ivan Shatsky 整理而成

If you say the wp_list_categories output format is ok to you and all you need is only to remove the links from parent categories, try the following code (you can add it to your functions.php):

add_filter( \'wp_list_categories\', \'sanitize_list_categories_links\', 10, 2 );
function sanitize_list_categories_links( $list, $args ) {
    if ( isset( $args[\'sanitize_links\'] ) && $args[\'sanitize_links\'] ) {
        $list = preg_replace( \'/(<li(?:|\\s[^>]*)>)<a(?:|\\s[^>]*)>(.*?)<\\/a>(\\s*<ul(?:|\\s[^>]*)>)/\', \'$1$2$3\', $list );
    }
    return $list;
}

and then add an extra parameter to your wp_list_categories arguments list:

wp_list_categories( array( ..., \'sanitize_links\' => 1 ) );

This regex will remove <a ...> and </a> HTML tags from <li ...><a ...>Category name</a> string if this string is followed with <ul ...> HTML tag meaning the category has at least one child and left those tags untouched otherwise.

Update

To get the HTML markup similar to your codepen example, you can use

add_filter( \'wp_list_categories\', \'sanitize_list_categories_links\', 10, 2 );
function sanitize_list_categories_links( $list, $args ) {
    if ( isset( $args[\'sanitize_links\'] ) && $args[\'sanitize_links\'] ) {
        $list = preg_replace( \'/(<li(?:|\\s[^>]*)>)<a(?:|\\s[^>]*)>(.*?)<\\/a>(\\s*<ul(?:|\\s[^>]*)>)/\',
                              \'$1<div class="title">$2</div>$3\', $list );
    }
    return $list;
}

相关推荐

Regarding Tags And Categories

我想为我的网站使用一个新主题,但问题是,在我当前的主题中,它有特殊的标记,例如“abc标记”,而在我的新主题中,它没有。因此,如果我更改主题,所有帖子都会消失(404错误)。我的问题是,是否可以创建一个具有不同名称的新SPESIFI标记(在本例中为abc标记)?或者,即使我的新主题没有abc标记,也可以将旧的abc标记迁移到新的abc标记吗?我尝试过使用elementor,但仍然没有成功,任何帮助都将非常。。非常非常非常感谢!谢谢大家^_^