我使用wp_list_categories()获取所有类别的列表并生成导航栏。有没有一种方法可以按字母顺序以外的特定顺序对这些类别进行排序。
例如:”连接”, “新闻和视图”, “问答”, ” Hello启动”, “启动101” …
#1
大多数主题都不会使用类别的描述。我所做的简单解决方法是在说明中使用数字。目前, 此处的热门文章中有一些来自jQuery的技巧, 是不需要的。
你也可以添加自定义订单字段。
只是
$categories = get_categories( array(
'orderby' => 'description', 'order' => 'ASC'
) );
#2
如果你不使用类别的”描述”字段, 则也可以通过在每个”描述”字段中输入数字来进行排序, 然后使用Javascript / jQuery基于此编号进行排序。
wp_list_categories函数具有use_desc_for_title参数, 你可以将其设置为true:
wp_list_categories('use_desc_for_title=1');
现在, 类别描述已设置为结果html中<a>标记的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 ) );
});
});
}
N.B.
- 不要在说明字段中使用0(零), 它将被忽略并设置为null
- 排序后, 你可能想要摆脱设置为数字的title属性, 这可以使用jQuery轻松完成。
#3
wordpress核心中的问题是表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过滤器, 并将orderby更改为term_order。
这是技术方法的所有相关链接的列表:
- wp数据库结构的https://codex.wordpress.org/Database_Description
- https://codex.wordpress.org/Class_Reference/wpdb以获取$ wpdb-> wp_terms
- https://developer.wordpress.org/reference/hooks/get_terms_args/用于WP过滤器
检查我的插件以解决此问题:WordPress实分类管理。 WP RCM在wp条件表上创建一个额外的字段term_order。如下面的屏幕快照所示, 它还带来了许多其他有用的功能。它允许你以一种不错的方式来组织你的wordpress类别。它易于使用, 只需将类别拖放到特定顺序即可。该插件适用于所有自定义帖子类型。
从产品描述中我可以引用。如果你想尝试使用该插件, 则在插件页面上还会有一个演示。
可以使用wordpress.org插件存储库中提供的许多免费插件来解决此问题。只需在Wordpress信息中心>插件>安装中搜索”类别顺序”。
#4
这是内置在wordpress_wp_list_categories中
wp_list_categories('orderby=name');
我认为那对你有帮助
#5
为了将来的访客受益, 以下是解决此问题的简便方法:
现在有许多插件可以让你在WordPress中订购类别或其他自定义分类法。你可以在WordPress插件目录的”类别顺序”标签页中看到其中的一些内容。我可以亲自确认”自定义分类命令NE”插件可以完成此工作。
#6
我做了它, 生成了几个术语表。我稍后根据自己的命令将其命名。我是PHP初学者。
首先, 将不同类别的ID存储在另一个变量中:
$terms = get_terms('my_taxonomy', 'hide_empty=0');
foreach ( $terms as $term ) {
${$term->slug} = get_term_by('slug', $term->slug, 'product_cat');
${$term->slug.'_array'} = (array)${$term->slug};
${$term->slug.'_array_id'} =${$term->slug.'_array'}['term_id'];
};
然后, 我为每个wp_list_categories()创建多个args(排除), 并使用此变量指定要使用的术语:
$args = array(
'taxonomy' => 'my_taxonomy', 'orderby' => 'name', 'show_count' => true, 'pad_counts' => false, 'hierarchical' => true, 'title_li' => '', 'hide_empty' => 0, 'show_option_all' => 'Show all', 'exclude' => array( $term1_array_id, $term2_array_id )
);
$args_1 = array(
'taxonomy' => 'my_taxonomy', 'orderby' => 'name', 'show_count' => true, 'pad_counts' => false, 'hierarchical' => true, 'title_li' => '', 'hide_empty' => 0, 'exclude' => array( $term3_array_id, $term4_array_id, $term1_array_id )
);
$args_2 = array(
'taxonomy' => 'my_taxonomy', 'orderby' => 'name', 'show_count' => true, 'pad_counts' => false, 'hierarchical' => true, 'title_li' => '', 'hide_empty' => 0, 'exclude' => array( $term1_array_id, $term4_array_id, $term5_array_id )
);
最后, 我可以分别称呼每个术语表:
<ul>
<?php wp_list_categories( $args ); ?>
<?php wp_list_categories( $args_1 ); ?>
<?php wp_list_categories( $args_2 ); ?>
</ul>
评论前必须登录!
注册