由于某种原因add_action( \'pre_get_posts\', \'category_custom_orderby\' );
钩子坏了。
是的,这是因为在Categories admin页面(您可以看到Categories列表),列表使用WP_Term_Query
而不是WP_Query
, 因此,上述挂钩(pre_get_posts
) 未激发。
因此,与上述内容不同add_action()
, 尝试使用parse_term_query
hook 像这样:
如果all 您的类别中有sort_order
元,
add_action( \'parse_term_query\', \'my_parse_term_query\' );
function my_parse_term_query( $query ) {
$args =& $query->query_vars;
if ( is_admin() && \'sort_order\' === $args[\'orderby\'] ) {
$args[\'meta_key\'] = \'sort_order\';
$args[\'orderby\'] = \'meta_value_num\';
}
}
如果有
do not have 这个
sort_order
元,
add_action( \'parse_term_query\', \'my_parse_term_query\' );
function my_parse_term_query( $query ) {
$args =& $query->query_vars;
if ( is_admin() && \'sort_order\' === $args[\'orderby\'] ) {
$args[\'meta_query\'] = isset( $args[\'meta_query\'] ) ?
(array) $args[\'meta_query\'] : array();
$args[\'meta_query\'][] = array(
\'relation\' => \'OR\',
\'sort_order\' => array( // include categories that have the meta
\'key\' => \'sort_order\',
\'type\' => \'NUMERIC\',
),
\'no_sort_order\' => array( // and categories that don\'t have the meta
\'key\' => \'sort_order\',
\'compare\' => \'NOT EXISTS\',
),
);
}
}
请注意,我使用了
$args[\'orderby\'] = \'meta_value_num\'
和
\'type\' => \'NUMERIC\'
因为我假设元值是一个数字?
此外=&
如中所示$args =& $query->query_vars
意味着我们引用的是原文$query_vars
中的属性WP_Term_Query
班所以如果我们修改$args
变量,这意味着我们实际上在修改原始$query_vars
所有物