Предполагая, что у вас есть массив объектов сообщений в
...<?php namespace WPSE109876; /** Plugin Name: WPSE (#109876) Collect Author IDs */ defined( 'ABSPATH' ) OR exit; \add_action( 'loop_start', array( __NAMESPACE__.'\LoopCollector', 'init' ) ) class LoopCollector { public static $instance = null; public $stack = array(); public function init() { is_null( self::$instance ) AND self::$instance = new self; return self::$instance; } public function __construct() { \add_action( 'the_post', array( $this, 'toStack' ) ); \add_action( 'shutdown', array( $this, 'printStack' ) ); } public function toStack( $post ) { $aid = absint( $post->post_author ); ! in_array( $aid, $this->stack ) $this->stack[] = $aid; } public function printStack() { printf( '<hr />Author IDs<pre>%s</pre>', join( "</br>", $this->stack ) ); } }
WP_User_Query
Вы получите авторов сообщений для текущая страница сообщений, а не авторов всех сообщений. Если вам нужны авторы всех сообщений, вам придется выполнить еще один запрос.
Чтобы запустить новый запрос на основе основного запроса в $this_query = array_unique($wp_query->query_vars);
$this_query['posts_per_page'] = -1;
$new_query = new WP_Query($this_query);
$authids = array_filter(wp_list_pluck($new_query->posts,'post_author'));
var_dump($authids); // debug
...
$wp_query
Я предостерегаю вас от этого. Вы можете запрашивать сотни или тысячи сообщений. Это может быть очень неэффективно или даже вызвать сбой сервера, в зависимости от сервера и нагрузки. Я почти уверен, что есть лучший способ сделать это, если вы все тщательно обдумаете и измените свою архитектуру.
http://codex.wordpress.org/Function_Reference/wp_list_pluck
http://php.net/manual/en/function.array-filter.php
Обычно есть $authids = array_unique(wp_list_pluck($my_posts,'post_author'));
для получения пользователей (/авторов). Но когда я прочитал, что вы хотите, чтобы все авторы из цикл текущей страницы-posts, возможно, было бы проще подключиться к циклу самостоятельно и собрать его.
$my_posts