编写自定义mysql查询以通过自定义用户元字段对wordpress用户进行排序

时间:2012-06-19 18:48:42

标签: mysql wordpress

基本上,我需要按他们居住的城市订购一个WordPress用户列表。我有一个城市的自定义用户元字段,我已经让查询正常工作,但查询列出了所有人因为它在订单的开头放置了空白字段,所以在开头就填写了一个城市。

我需要的是弄清楚如何只选择和显示在城市字段中给出空白以外值的用户。不幸的是,我发现自己很难过。

有关如何做到这一点的任何想法?此外,如果有人知道使用wp_user_query来定制自定义用户元字段的方法,而不是这个混乱,我很满意。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$limit = 10;
$offset = ($paged - 1) * $limit;
$key = 'city';

$sql = "SELECT SQL_CALC_FOUND_ROWS {$wpdb->users}.* FROM {$wpdb->users}

INNER JOIN {$wpdb->usermeta} wp_usermeta ON ({$wpdb->users}.ID = wp_usermeta.user_id)
INNER JOIN {$wpdb->usermeta} wp_usermeta2 ON ({$wpdb->users}.ID = wp_usermeta2.user_id)
WHERE 1=1
    AND wp_usermeta.meta_key = 'wp_capabilities'
    AND CAST(wp_usermeta.meta_value AS CHAR) LIKE '%\"subscriber\"%'
    AND wp_usermeta2.meta_key = '$key'
ORDER BY wp_usermeta2.meta_value ASC
LIMIT $offset, $limit";

$site_users = $wpdb->get_results($sql);

$found_rows = $wpdb->get_var("SELECT FOUND_ROWS();");

foreach ($site_users as $site_user) { 
    // user info here
}

1 个答案:

答案 0 :(得分:0)

尝试类似

的内容
...
WHERE 1=1
    AND wp_whatever.name_of_city IS NOT NULL
    AND LENGTH(wp_whatever.name_of_city) > 0
    AND wp_usermeta.meta_key = 'wp_capabilities'
...