是否按ASC/DESC顺序对自定义分类进行排序?

时间:2013-09-20 作者:Ray

在任何人说我没有尝试之前,让我说我为实现这一目标做了很多努力。我甚至实现了,但当我向函数添加以下代码时。php排序工作正常,但左侧的过滤器不工作。

function orderby_tax_clauses( $clauses, $wp_query ) {
global $wpdb;
$taxonomies = get_taxonomies();
foreach ($taxonomies as $taxonomy) {
if ( isset( $wp_query->query[\'orderby\'] ) && $taxonomy == $wp_query->query[\'orderby\'] )     {
$clauses[\'join\'] .=<<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb-    >term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
            $clauses[\'where\'] .= " AND (taxonomy = \'{$taxonomy}\' OR taxonomy IS NULL)";
            $clauses[\'groupby\'] = "object_id";
        $clauses[\'orderby\'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
        $clauses[\'orderby\'] .= ( \'ASC\' == strtoupper( $wp_query->get(\'order\') ) ) ? \'ASC\' : \'DESC\';
}
}
return $clauses;
}

add_filter(\'posts_clauses\', \'orderby_tax_clauses\', 10, 2 );
此特定代码

add_filter(\'posts_clauses\', \'orderby_tax_clauses\', 10, 2 );
我认为这是造成问题的原因,因为当我删除这条线时,它会正确过滤。我认为当我同时使用filter和soering选项时,会产生一些查询冲突并给出“找不到结果”。当我只使用orting时,它会工作;当我只使用filter时,它会工作。如何使两者协同工作?

这是网站:

http://tjdesigners.info/mooctracks/searchresults/?

请帮帮我!

非常感谢你!

提尔塔

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

如果您确实需要按分类术语进行排序,我认为您的应用程序中的数据结构设计很糟糕。想想看。

分类法是对事物进行分组的一种方式,比如说帖子。分类法是一组“术语”,帖子按照它们之间共享的“术语”进行分组。在我看来,如果术语按其应有的方式使用,则按术语排序根本没有用处,也没有任何意义。

让我们来看一下页面中的一个示例:您可以通过“Codecademy”平台进行过滤,这样您就可以获得分配给“Codecademy”的项目组。然后单击“platform”表头,按“Codecademy”排序,逻辑在哪里?。这就像有一群“牙医”,你想按“牙医”排序;你可能想按描述每个牙医的东西来分类,比如名字或费用,但不要按“牙医”来分类。你明白我的意思吗?If you need to sort by some posts characteristic, you should use customs post meta fields or core post fields, not taxonomies.

另一个例子是,如果您想按照“平台”分类法的字母顺序进行排序,那么您真正想要的是按照字母顺序对分类法的术语进行排序,并显示每个术语的帖子,这不是对帖子进行排序,而是对术语进行排序。

无论如何,如果你真的想按分类术语排序,你可以这样做,不是用Wordpress提供的标准方式,而是用一种自定义方式,比如你正在使用的自定义SQL中的变通方法或者this article.

结束

相关推荐

Posts2Posts、wp_Query和orderby问题

我已经在这个问题上工作了好几个小时了,我被难住了。以下查询拒绝接受任何orderby指令。NOTE: 这是在单个cpt上运行的。正常WP循环中的php页面:<?php $args = array( \'orderby\' => \'title\', \'order\' => \'ASC\', \'suppress_filters\' => true, \'nopaging\' => true, \'conne