我使用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="http://www.srcmini.com/#" title="3">
Category C<
/a>
<
/li>
<
li>
<
a href="http://www.srcmini.com/#" title="1">
Category A<
/a>
<
/li>
<
li>
<
a href="http://www.srcmini.com/#" 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轻松完成。
现在, 使用简单的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.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 )
);
【如何在WordPress中排序类别()】最后, 我可以分别称呼每个术语表:
<
ul>
<
?php wp_list_categories( $args );
?>
<
?php wp_list_categories( $args_1 );
?>
<
?php wp_list_categories( $args_2 );
?>
<
/ul>
推荐阅读
- 如何防止WordPress主题删除分析跟踪参数
- 如何防止用户两次将同一文件上传WordPress
- 如何将WordPress管理栏菜单移动到我的主题标题栏
- 如何按需修改已注册分类法的显示UI
- 如何在wp-admin之外管理wordpress插件()
- 如何管理父和子的主题()
- WP如何制作分隔线( [重复])
- 如何在WordPress中根据日期使标题加粗()
- linux之cp强制复制文件