我在堆栈溢出上使用了此页面中的一些代码:Using wp_query is it possible to orderby taxonomy?
这是一个能够根据分类法值对查询进行排序的函数。虽然它工作得很好,但我想更进一步。
我从分类术语中检索到的值是一个数字。但是,如果我按这个数字排序,它会给出以下顺序:1 10 11 2 21 22,依此类推。
我希望它能“正常”排序,1 2 3 5 9 11 15 21 22等等。
根据谷歌的说法,我应该在值中加0,使其成为一个数值,但我不知道在这段代码中应该放在哪里。在某个地方,它应该表示值+0。你知道我应该把它放在哪里吗?
关于此代码:
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\'] .= ( \'DESC\' == strtoupper( $wp_query->get(\'order\') ) ) ? \'ASC\' : \'DESC\';
}
}
return $clauses;
}
add_filter(\'posts_clauses\', \'orderby_tax_clauses\', 10, 2 );