如何在WordPress中订购类别?

San*_*eef 10 wordpress wordpress-theming

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

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

小智 7

大多数主题都不会使用类别的描述。我所做的简单解决方法是在说明中使用数字。目前,此处的热门文章中有一些来自jQuery的技巧,是不需要的。

您也可以添加自定义订单字段。

只是

$categories = get_categories( array(
    'orderby' => 'description',
    'order'   => 'ASC'
) );
Run Code Online (Sandbox Code Playgroud)


reu*_*eus 6

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

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

wp_list_categories('use_desc_for_title=1');
Run Code Online (Sandbox Code Playgroud)

类别描述现在<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>
Run Code Online (Sandbox Code Playgroud)

现在您可以对列表进行排序,例如在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 ) );
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

NB

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

  • 哇真的,这会变得更加骇客吗? (9认同)

Mat*_*ter 6

技术途径

wordpress core 的问题是表wp_terms没有term_order列。这意味着,标准 WordPress 不支持自定义术语顺序。如果您查看此WP 数据库结构,您可以找到该表wp_term_relationships。该表负责帖子和分类(您的类别)之间的关系并且该表有一term_order列。

现在,使用简单的 SQL 语句ALTER TABLE wp_terms ADD term_order INT(11) NOT NULL DEFAULT 0(不要忘记$wpdb->wp_terms变量),您可以向表中添加一列,该列负责您的自定义类别顺序。wp_term_relationships然后您可以将您的自定义类别顺序放入和这两列中wp_terms。一切完成后,您可以挂接到 的过滤器get_terms_args并将 更改orderbyterm_order

以下是该技术方法的所有相关链接的列表:

插件可以为您完成这项工作

检查我的插件来解决这个问题:WordPress Real Categories ManagementWP RCM在 wp terms 表上创建一个额外的字段 term_order。它还带来了许多其他有用的功能,如下面的屏幕截图所示。它允许您以一种很好的方式组织您的 WordPress 类别。它易于使用,只需拖放您的类别并将其移动到特定的顺序即可。该插件适用于所有自定义帖子类型

拖放类别顺序

从产品描述中我可以引用。如果您想尝试该插件,插件页面上还有一个演示。

有很多免费插件

这个问题可以通过 wordpress.org 插件存储库中提供的许多免费插件来解决。只需在 WordPress 仪表板 > 插件 > 安装中搜索“类别顺序”即可。


Ezh*_*hil 4

这是内置的wordpress_wp_list_categories

wp_list_categories('orderby=name');
Run Code Online (Sandbox Code Playgroud)

我认为这会对你有所帮助