PHP for循环筛选文章 如何按分类description字段排序WordPress艺术家文章
解决方案
你现在贴的代码是单篇艺术家条目的渲染模板,排序逻辑不在这部分,你需要根据你的项目实现方式,选下面任意一种方案修改:
方案1:前端网格排序(适用用Isotope、Masonry等前端网格库实现排序的场景)
你代码里已经给每个条目绑定了data-order属性存储分类description的值,只需要修改网格初始化的JS配置,指定按data-order升序排序即可:
// 找到你主题里初始化网格的JS代码,修改sortBy相关配置即可 $('.grid').isotope({ itemSelector: '.grid-item', layoutMode: 'masonry', sortBy: 'order', // 指定按data-order属性排序 sortAscending: true // 正序:A→D,设为false就是倒序D→A });
方案2:后端查询排序(更推荐,SEO友好,兼容性更好)
直接修改WordPress查询艺术家文章的逻辑,返回结果时就按分类description排序,不需要依赖前端JS。把下面代码加到你当前主题的functions.php文件里即可:
add_action('pre_get_posts', 'custom_sort_artists_by_tax_description'); function custom_sort_artists_by_tax_description($query) { // 仅对前台艺术家文章存档页的主查询生效,不影响后台和其他页面 if ( !is_admin() && $query->is_main_query() && is_post_type_archive('artists') ) { // 先获取所有filter分类,按description升序排列拿到分类ID数组 $sorted_filter_terms = get_terms([ 'taxonomy' => 'filter', 'orderby' => 'description', 'order' => 'ASC', 'hide_empty' => true, 'fields' => 'ids' ]); // 设置查询规则,按分类的顺序返回文章 $query->set('tax_query', [ [ 'taxonomy' => 'filter', 'field' => 'term_id', 'terms' => $sorted_filter_terms, 'operator' => 'IN' ] ]); $query->set('orderby', 'tax__in'); $query->set('order', 'ASC'); } }
如果你的自定义文章类型slug不是artists,或者艺术家列表是自定义页面输出,把上述代码里的is_post_type_archive('artists')替换为对应页面的判断规则即可,比如用is_page('艺术家列表页别名')。
补充说明
你之前修改的$filter_ = $f->{'slug'}相关变量是用来生成网格筛选的CSS类名的,和排序逻辑无关,所以调整后不会生效。
内容的提问来源于stack exchange,提问作者Octavio Kh
相关产品推荐
相关产品推荐

