如何在WordPress中订购类别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

wp_list_categories()用来获取所有类别的列表并生成导航栏。有没有办法按字母排序以特定顺序排序这些类别。

例如:Connect,News&Views,Q&A,Hello Startup,Startup 101 ......

提问于
用户回答回答于

为了未来访问者的利益,这里是解决此问题的简单方法:

现在有许多插件允许你在WordPress中订购类别或其他自定义分类。你可以在WordPress插件目录的“类别顺序”标签页中看到其中一些。我个人可以确认Custom Taxonomy Order NE插件可以完成这项工作。

用户回答回答于

如果你不使用类别的“描述”字段,也可以通过在每个“描述”字段中输入一个数字来完成排序,然后根据此编号使用Javascript / jQuery进行排序。

wp_list_categories函数有一个use_desc_for_title参数,你可以将其设置为true:

wp_list_categories('use_desc_for_title=1');

类别描述现在设置为<a>生成的html中标签的title属性。

因此,如果你在说明字段中使用数字,则生成的类别列表可能如下所示:

 <ul id="category_list">
    <li><a href="#" title="3">Category C</a></li>
    <li><a href="#" title="1">Category A</a></li>
    <li><a href="#" title="2">Category B</a></li>  
 </ul>

现在你可以对列表进行排序,例如在document.ready事件中使用jQuery。如果以分层方式使用子类别,请使用如下的递归函数:

$( document ).ready( 
    function() {
       sort_list_recursive( $( '#category_list' ) );
    }
);

function sort_list_recursive( parent ) {
    var lst = parent.children( 'li' );
    lst.sort(
        function( a, b ) {
            var _a = a.getElementsByTagName( 'a' )[0].title;
            var _b = b.getElementsByTagName( 'a' )[0].title;
            return _a > _b ? 1 : -1;
        }
    ).appendTo( parent );
    lst.each( function() {
        $( this ).children( 'ul' ).each( function() {
            sort_list_recursive( $( this ) );
        });
    });
}

NB

  • 不要在描述字段中使用0(零),它将被忽略并设置为null
  • 排序后你可能想要摆脱设置为数字的标题属性,这可以通过jQuery轻松完成。

扫码关注云+社区

领取腾讯云代金券