2012-09-12 52 views
0

我正在尝试使用WordPress用户查询来创建由自定义元值排序的用户列表。首先要显示它的一个简单的数值,会从1到100,所以1种需要,100最后,等WordPress - 用户查询 - 按Meta Value排序

这是我的尝试,已经悲惨地失败了:

<?php 

    $args = array(
     'role' => 'Author', 
     'meta_key' => 'order-number', 
     'orderby' => 'order-number', 
     'order' => 'asc', 
    ); 

$wp_user_query = new WP_User_Query($args); 
$authors = $wp_user_query->get_results(); 

if (!empty($authors)) 
{ 
    echo '<div style="float:left;">'; 
    foreach ($authors as $author) 
    { 
     $author_info = get_userdata($author->ID); 
     echo '<div class="post team-member"><div class="image">'; 
     echo get_avatar($author_info->ID, 91); 
     echo '</div>'; 
     echo '<div class="content"><div class="title"><a href="/author/' . $author_info->user_login . '">' . $author_info->user_firstname . ' ' . $author_info->user_lastname . '</a></div>'; 
     echo '' . substr(get_the_author_meta('user_description',$author_info->ID) , 0 , 100) . '...'; 
     echo '</div></div>'; 
    } 
    echo '</div>'; 
} else { 
    echo 'No authors found'; 
} 

    ?> 

我觉得问题是wp_user_query不支持orderby中的自定义字段 - 所以我需要一个解决方案来解决这个问题。

任何想法?

回答

3

正确。 orderby参数只能接受'login'(默认),'nicename','email','url'和'registered'的可能值。

一个肮脏的解决将是这样的:

<?php 
global $wpdb; //Ignore this line if you're not within a function 
$order = $wpdb->get_results("SELECT DISTINCT user_id FROM $wpdb->usermeta WHERE meta_key='order-number' ORDER BY meta_value ASC", "ARRAY_N"); 
$authors = array(); 
foreach($order as $aid) 
    $authors[] = new WP_User($aid[0]); 

if (!empty($authors)) 
{ 
    echo '<div style="float:left;">'; 
    foreach ($authors as $author) 
    { 
     $author_info = get_userdata($author->ID); 
     echo '<div class="post team-member"><div class="image">'; 
     echo get_avatar($author_info->ID, 91); 
     echo '</div>'; 
     echo '<div class="content"><div class="title"><a href="/author/' . $author_info->user_login . '">' . $author_info->user_firstname . ' ' . $author_info->user_lastname . '</a></div>'; 
     echo '' . substr(get_the_author_meta('user_description',$author_info->ID) , 0 , 100) . '...'; 
     echo '</div></div>'; 
    } 
    echo '</div>'; 
} else { 
    echo 'No authors found'; 
} 

这主要是未经测试,所以我不能保证这会工作直接出了大门,但它应该让你开始。

希望这会有所帮助!

+0

非常感谢你对此 –

+0

@ maiorano84非常感谢我花了几个小时试图解决这个问题,这只是一个窍门。我仍然努力的一部分是限制只有角色“订阅者”的用户? – tbwcf

+0

@tbwcf - 在WP_User对象实例化后,最好处理该信息。要限制作者数组仅限订阅者,你可以这样做:'foreach($ order as $ aid){$ u = new WP_User($ aid [0]); if(in_array(“subscriber”,$ u-> roles))$ authors [] = $ u; }' – maiorano84

2
<?php 

// prepare arguments this is your query. 
$args = array(
'meta_key' => 'last_name', 
'query_id' => 'wps_last_name', 
); 

// Create the WP_User_Query object 
$author_query = new WP_User_Query($args); 

?> 

Add following lines to functions.php file 

<?php 

add_action('pre_user_query', 'wps_pre_user_query'); 
/* 
* Modify the WP_User_Query appropriately 
* 
* Checks for the proper query to modify and changes the default user_login for $wpdb->usermeta.meta_value 
* 
* @param WP_User_Query Object $query User Query object before query is executed 
*/ 
function wps_pre_user_query(&$query) { 
global $wpdb; 
if (isset($query->query_vars['query_id']) && 'wps_last_name' == $query->query_vars['query_id']) 
$query->query_orderby = str_replace('user_login', "$wpdb->usermeta.meta_value", $query->query_orderby); 
} 
?>