根据用户的最新帖子日期对用户进行排序

时间:2013-04-18 作者:Midhun

我使用以下代码在我的多作者博客中获取的作者,并按他们的帖子数排序。我想在他们最后一次发帖之前订购

$authors = get_users(\'role=author&orderby=post_count&order=DESC\');

2 个回复
最合适的回答,由SO网友:tfrommen 整理而成

把这个放进你的functions.php:

function get_users_ordered_by_post_date($args = \'\') {
    // Prepare arguments
    if (is_string($args) && \'\' !== $args)
        parse_str($args, $args);
    $asc = (isset($args[\'order\']) && \'ASC\' === strtoupper($args[\'order\']));
    unset($args[\'orderby\']);
    unset($args[\'order\']);

    // Get ALL users
    $users = get_users($args);
    $post_dates = array();
    if ($users) {
        // For EACH user ...
        foreach ($users as $user) {
            $ID = $user->ID;

            // ... get ALL posts (per default sorted by post_date), ...
            $posts = get_posts(\'author=\'.$ID);
            $post_dates[$ID] = \'\';

            // ... then use only the first (= newest) post
            if ($posts) $post_dates[$ID] = $posts[0]->post_date;
        }
    }

    // Sort dates (according to order), ...
    if (! $asc)
        arsort($post_dates);

    // ... then set up user array
    $users = array();
    foreach ($post_dates as $key => $value) {
        // $user = get_userdata($key);
        // $users[] = $user->ID;
        $users[] = get_userdata($key);
    }
    return $users;
}
上述函数返回array of WP_User objects.

// EDIT: 该函数现在支持args参数(字符串或数组)。输出的顺序与order=DESCorder=ASC. 这个order_by 参数为remove(无论如何,我们希望按最后一个发布日期订购),所有其他参数都传递给get_users.

现在,您可以使用如下函数:

get_users_ordered_by_post_date();

get_users_ordered_by_post_date(\'role=author\');

// order by OLDEST post first
get_users_ordered_by_post_date(\'role=administrator&order=ASC\');

SO网友:Ignacio Cordoba

如果有人在使用这个(像我一样),这里有一个更新版本。我相信这会更快,因为它不需要get_userdata() 在每个岗位上。

function get_users_ordered_by_post_date_dev($args = \'\') {
  // Prepare arguments
  if (is_string($args) && \'\' !== $args)
      parse_str($args, $args);
  $asc = (isset($args[\'order\']) && \'ASC\' === strtoupper($args[\'order\']));
  unset($args[\'orderby\']);
  unset($args[\'order\']);
  //Date = today
  $today = date( \'Y-m-d\' );
  // Get ALL users
  date_default_timezone_set(\'America/New_York\');
  $users = get_users($args);
  $post_dates = array();
  if ($users) {
    // For EACH user ...
    foreach ($users as $user) {
        $ID = $user->ID;
        // ... get ALL posts (per default sorted by post_date), ...
        $posts = get_posts(
          array(
            \'author\' => $ID,
            \'date_query\' => array(
              \'year\'          => (int)date(\'Y\'),
              \'month\'         => (int)date(\'n\'),
              \'day\'           => (int)date(\'j\'),
              \'compare\'       => \'=\',
              \'column\'        => \'post_date\',
            )
          )
        );
        if ($posts) $post_dates[$posts[0]->post_date] = [
          \'author\' => $user,
          \'post\' => $posts[0]
        ];
    }
    if (! $asc){
        krsort($post_dates);
    }else{
        ksort($post_dates);
    }
    return $post_dates;
  }
}
最大的变化是:

...
    if ($posts) $post_dates[$posts[0]->post_date] = [
          \'author\' => $user,
          \'post\' => $posts[0]
        ];
    }
    if (! $asc){
        krsort($post_dates);
    }else{
        ksort($post_dates);
    }
    return $post_dates;
我使用发布日期作为$post_dates (Assoc阵列)。根据论点\'ASC\' 将按升序或降序排列。

需要考虑的一件事是,生成的Assoc数组将包含WP\\u Post(在[\'post\']) 和WP\\U用户(在[\'author\']).

结束

相关推荐

Separate Out Real Users

如果我看/wp-admin/users.php 我看到了所有的用户,但有些用户发送了一封虚假的电子邮件,从未使用过他们的密码。有没有办法知道谁至少使用过一次密码?如果没有,是否有一个插件可以继续这样做?