получить сообщения() возвращает все сообщения, а не те, которые указаны с помощью "автор сообщения" =>


Я хочу получить массив с записями определенного пользователя для категории пользовательских типов записей.

Однако get_posts($arg) возвращает ВСЕ сообщения этого пользовательского типа, хотя я указал post_author

<?php $pages = get_posts(array('post_type'  => 'profile','post_author' => $post->post_author)); ?>

<?php var_dump ($pages); ?>

В этом примере $post->post_author равно 11. Однако результатом приведенного выше кода является:

array(3) { 
[0]=> object(WP_Post)#343 (24) { 
["ID"]=> int(2326)
["post_author"]=> string(2) "11" 
..etc.} 
[1]=> object(WP_Post)#352 (24) { 
["ID"]=> int(2324) 
["post_author"]=> string(1) "0" 
 ...etc.}
[2]=> object(WP_Post)#395 (24) { 
["ID"]=> int(2322)
["post_author"]=> string(1) "0" 
...etc.} 

Почему get_posts() возвращает сообщения авторов, чей идентификатор не 11?

 1
Author: SPi, 2014-03-12

2 answers

post_author недопустимый параметр для get_posts. Вам действительно нужно взглянуть на список аргументов WP_Query, чтобы увидеть это, поскольку get_posts() на самом деле просто оболочка вокруг этого класса.

  • автор ( int) - использовать идентификатор автора.
  • имя автора ( строка) - используйте "имя пользователя" (НЕ имя).
  • автор__в ( массив) - используйте идентификатор автора (доступен с версии 3.7).
  • автор__не_в ( массив) - использовать идентификатор автора (доступен с версией 3.7).

Http://codex.wordpress.org/Class_Reference/WP_Query#Author_Parameters

То, что вы хотите, - это author без части post_. Попробуйте это, и это должно сработать.

 5
Author: s_ha_dum, 2014-03-12 13:44:01

Поскольку совершенно неясно, откуда берется $post->post_author, наиболее вероятная проблема заключается в том, что вы либо не ссылаетесь на экземпляр $GLOBALS['post'] WP_Post, либо у вас есть другой запрос после основного цикла, который заменяет основной запрос.

Вам лучше всего, вероятно, будет использовать wp_reset_query(). Это приведет к перестройке объекта $GLOBALS['wp_query'], который содержит текущий запрос, с $GLOBALS['wp_the_query'] снова, который содержит основной запрос , а затем вызовет wp_reset_postdata() для перемотки основного запрос.

Если это не поможет, то есть вероятность, что какой-то плагин (или вы) или тема использовали query_posts(), который перезаписывает глобальный объект $wp_the_query и, следовательно, портит ваш цикл.

 0
Author: kaiser, 2014-03-12 13:37:22