我有一个名为“label”的自定义用户分类法,其中还有一个自定义字段“sort\\u order”-我试图返回具有标签分类法的用户列表,然后按sort\\u order字段对该列表进行排序。
到目前为止,我。。。。。
<?php
$users = get_users(
array(
\'meta_key\' => \'sort_order\',
\'fields\' => \'all_with_meta\'
)
);
function wpse98580_sort_order( $a, $b )
{
if ( $a->sort_order === $b->sort_order ) {
return 0;
} elseif ( $a->sort_order > $b->sort_order ) {
return -1;
}
return 1;
}
usort( $users, \'wpse98580_sort_order\' );
/* Iterate over the sorted array */
foreach( $users as $user )
{
echo \'<h4>\' . $user_info-> user_firstname . \' \' . $user_info-> user_lastname . \'</h4>\';
}
?>
这行不通,我假设这是因为“sort\\u order”元键实际上是分类法的一个自定义字段,所以它无法检索它。通常我使用以下代码访问sort\\u顺序。。。
$product_terms = wp_get_object_terms($user->ID, \'label\');
if(!empty($product_terms)){
if(!is_wp_error( $product_terms )){
foreach($product_terms as $term){
$t_ID = $term->term_id;
$label_custom_fields = get_option("taxonomy_term_$t_ID");
echo $label_custom_fields[\'sort_order\'];
}
}
}
有人能帮忙吗?
SO网友:Johannes Pille
我注意到get_users
不支持此操作。
不幸的是,这并不需要meta_value
或meta_value_num
作为orderby
参数,正如其与post相关的伙伴所做的那样。
但我们可以指定只获取那些具有meta\\u键值的sort_order
设置:
$users = get_users(
array(
\'meta_key\' => \'sort_order\',
\'fields\' => \'all_with_meta\'
)
);
get_users()
返回用户对象的数组(
WP_User
类)
尽管如此
a var_dump
of one of those objects will not reveal it, 由于类的神奇方法,用户的元数据可以作为属性访问。
因此,尽管未经测试,但以下内容应按您的意愿对用户进行排序:
function wpse98580_sort_order( $a, $b )
{
if ( $a->sort_order === $b->sort_order ) {
return 0;
} elseif ( $a->sort_order > $b->sort_order ) {
return -1;
}
return 1;
}
usort( $users, \'wpse98580_sort_order\' );
/* Iterate over the sorted array */
有关参考,请参见
usort
.
SO网友:s_ha_dum
有一个操作应该做到这一点。它似乎没有很好的文档记录,但pre_user_query
does show up in source.
function alter_user_search($qry) {
global $wpdb;
$key = $qry->get(\'meta_key\');
if (isset($key)) {
// $qry->query_orderby = preg_replace(\'/ORDER BY (.*) (ASC|DESC)/\',"ORDER BY {$wpdb->usermeta}.meta_value ".$qry->get(\'order\') ,$qry->query_orderby);
$qry->query_orderby = preg_replace(\'/ORDER BY (.*) (ASC|DESC)/\',"ORDER BY CAST({$wpdb->usermeta}.meta_value AS UNSIGNED) ".$qry->get(\'order\') ,$qry->query_orderby);
}
// var_dump($qry); die;
}
add_action( \'pre_user_query\', \'alter_user_search\' );
如果设置了键,这将对元键上的查询进行排序,这可能过于激进,但您可以添加更多条件。这是用我的数据库中的值进行的最低限度测试,但它似乎确实有效(相当肯定)。该查询有两个版本。第二份遗嘱
CAST
你的
meta_value
至
INTEGER
因此,您应该得到适当的数字排序。
几乎未经测试。可能是马车排空警告。不退款。