如何在WP_USER_QUERY的结果数组中包含用户元信息?

时间:2015-03-26 作者:PeregrineStudios

我正试图在自定义WordPress站点上完成一些相当复杂的自定义功能。客户有一个“关于我们”页面,其中包括所有团队成员及其照片的列表。我们正在尝试设置该站点,以便客户端在“关于”页面中添加或删除团队成员所需的全部操作都是添加或删除站点用户。基本上,“关于”页面会自动填充特定用户级别的WordPress用户。我认为这是一个非常聪明的主意,而且效果很好!下面是代码(在functions.php中):

function query_team(){
    $admin_query = new WP_User_Query(
        array(
            \'role\' => \'administrator\',
        )
    );

    $admins = $admin_query->get_results();

    $editor_query = new WP_User_Query(
        array(
            \'role\' => \'editor\'
        )
    );

    $editors = $editor_query->get_results();

    $author_query = new WP_User_Query(
        array(
            \'role\' => \'author\'
        )
    );

    $authors = $author_query->get_results();

    $contr_query = new WP_User_Query(
        array(
            \'role\' => \'contributor\'
        )
    );

    $contrs = $contr_query->get_results();

    $users = array_merge($admins, $editors, $authors, $contrs);

    return $users;
}
如您所见,我正在合并几个WP\\u User\\u查询的数组结果,因为谷歌告诉我,这是只获取几个预定义用户组的用户的唯一方法。

现在,我遇到了一个小问题。客户机(理所当然地)希望能够按照他想要的顺序对用户进行排序。因此,我添加了一些称为“sort\\u order”的自定义用户元信息,其想法是您可以输入一个数字,然后WordPress将根据该数字对用户列表的显示顺序进行排序。然而,问题是这些查询实际上并没有获得用户元信息——“sort\\u order”字段没有包含在这些查询的任何结果中。

最重要的是,当我们进行查询时,仅仅根据元信息对用户进行排序是不够的;我们需要在数组合并后对它们进行排序(例如,管理员的排序顺序可能低于作者)。因此,我需要一种方法,在WP\\u user\\u Query弹出的数组中包含用户元信息,合并所有数组,然后使用用户元信息对最终数组进行排序。

TL;DR: how can I include user meta information in the resulting array of a WP_User_Query?

提前感谢您的帮助!

1 个回复
SO网友:AJD

要按元字段排序,需要使用meta\\u键和meta\\u值(或meta\\u值\\u num):

array(
    \'meta_key\' => \'sort_order\', //This is the custom field to orderby
    \'orderby\' => \'meta_value_num\', //for numerical values
    \'role\'     => \'Administrator\', 
    \'fields\' => \'all_with_meta\',
);
但是。。。这可能会在合并之前对结果进行排序。。。所以

您可以使用meta\\u query来获取多个角色,而不是单独的查询:(Get multiple roles with get_users)

(未经测试)

global $wpdb;
$blog_id = get_current_blog_id();

$user_query = new WP_User_Query( array(

 \'meta_query\' => array(
      \'relation\' => \'OR\',
      array(
        \'key\' => $wpdb->get_blog_prefix( $blog_id ) . \'capabilities\',
        \'value\' => \'author\',
        \'compare\' => \'like\'
      ),
      array(
        \'key\' => $wpdb->get_blog_prefix( $blog_id ) . \'capabilities\',
        \'value\' => \'editor\',
        \'compare\' => \'like\'
      )
    )
  //Then add the rest of the query

     \'meta_key\' => \'sort_order\', //This is the custom field to orderby
     \'orderby\' => \'meta_value_num\', //for numerical values
    //\'fields\' => \'all_with_meta\', //which fields to return

) );

结束