Анализ Запроса Только Идентификаторов Авторов

  • Автор темы Shayladnmsn100
  • Обновлено
  • 21, Oct 2024
  • #1

Мне нужен массив только всех идентификаторов авторов из цикла, каждый только один раз, если это возможно, и из всех сообщений в цикле. Есть предложения?

#запрос #автор #массив #id

Shayladnmsn100


Рег
25 Oct, 2024

Тем
76

Постов
181

Баллов
581
  • 25, Oct 2024
  • #2

Предполагая, что у вас есть массив объектов сообщений в

 
 
 <?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

 

Smoomogyncmax10


Рег
18 Sep, 2006

Тем
76

Постов
179

Баллов
589
  • 25, Oct 2024
  • #3

Обычно есть $authids = array_unique(wp_list_pluck($my_posts,'post_author')); для получения пользователей (/авторов). Но когда я прочитал, что вы хотите, чтобы все авторы из цикл текущей страницы-posts, возможно, было бы проще подключиться к циклу самостоятельно и собрать его.

$my_posts
 

Fumscusty


Рег
14 Mar, 2016

Тем
75

Постов
215

Баллов
620
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно