2012-09-12 54 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); 
} 
?>