Как получить массив пост-данных из результата wp_query?
-
-
Важное различие между прямым доступом к данным публикации и использованием тегов шаблонов заключается в том,что фильтры не применяются к данным,и некоторые функции могут нарушиться.An important difference to keep in mind between accessing post data directly versus using template tags is that filters are not applied to the data and some functionality may break.
- 2
- 2016-12-30
- Milo
-
3 ответ
- голосов
-
- 2012-08-11
Вам следует прочитать справочник по функциям для WP_Query в кодексе WordPress.Вот вам и множество примеров.Если вы не хотите перебирать набор результатов с помощью
while
,вы можете получить все сообщения,возвращенные запросом,с помощьюWP_Query
в свойствеposts код>.
Например
$ query=new WP_Query (array ('post_type'=> 'page')); $posts=$ query- >posts; foreach ($posts как $post) { //Делайте свои дела,например //echo $post- >post_name; }
You should read the function reference for WP_Query on the WordPress codex. There you have a lot of examples to look at. If you don't want to loop over the result set using a
while
, you could get all posts returned by the query with theWP_Query
in the propertyposts
.For example
$query = new WP_Query( array( 'post_type' => 'page' ) ); $posts = $query->posts; foreach($posts as $post) { // Do your stuff, e.g. // echo $post->post_name; }
-
Однако ни один из примеров,на которые вы ссылаетесь,не демонстрирует,как обрабатывать сообщения.Хорошо,что вы ответили,жаль,что этого нет в документации.Еще один совет: если вы сопоставляете уникальный пост,вы можете использовать такую функцию с 'posts_per_page'=> 1` в args.`function wp_queryfirstpost ($ args) { $ q=новый WP_Query ($ args); $pp=$ q->get_posts (); $firstpost=false; если ($pp) $firstpost=$pp [0]; wp_reset_postdata (); return $firstpost; } `None of the examples you link to demonstrates how to process posts, though. So it's good that you answered, pity they don't have it in the documentation. Another tip: If you're doing a match on a unique post you can use a function like this with `'posts_per_page'=>1` in args. `function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }`
- 1
- 2014-03-21
- Henrik Erlandsson
-
@rofflox: Ты святой!Отлично подходит для обходаget_the_title/ID/younameit.@rofflox: You are a saint! Great for circumventing get_the_title/ID/younameit.
- 0
- 2015-04-30
- Vial
-
Вместо этого вы должны использовать `$ query->posts`,` $ query->get_posts () `вызовет повторный запуск синтаксического анализа запроса и дополнительные ненужные запросы к базе данныхYou should use `$query->posts` instead, `$query->get_posts()` will trigger a re-running of the query parsing and additional unnecessary database queries
- 8
- 2015-11-01
- Tom J Nowell
-
$ query->get_posts ();не работает должным образом.Не уверен,почему,но он возвращает меньше сообщений,чем запрос.Смотрите здесь: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work$query->get_posts(); is not working as expected. Not sure why but it returns fewer post than the query. See here: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work
- 0
- 2016-11-12
- Laxmana
-
Этот ответ совершенно неверен,когда вы создаете новый WP_Query с некоторыми аргументами,методget_posts () сразу вызывается изнутри,и вы НЕ ДОЛЖНЫ НАЗЫВАТЬ ЕГО СНОВА!Если вы вызовете его снова,как показано в приведенном выше примере,он запустит ДРУГОЙ запрос,в зависимости от аргументов и результатов при начальном запуске (набор внутренних флагов и т. Д.),И потенциально может вернуть другой (меньший) набор результатовили вообще никаких результатов.Как предложили TomJNowell и Laxmana выше,для получения данных поста следует использовать $ query->posts.This answer is plain wrong, when you create a new WP_Query with some arguments the method get_posts() is internally called right away and you SHOULD NOT CALL IT AGAIN! If you call it again as shown in the example above it will run a DIFFERENT query, depending on the arguments and results form the initial run (internal flags set, etc..), and can potentially return a different (smaller) set of results or no results at all. As TomJNowell and Laxmana suggested above one should use $query->posts to get the post data.
- 1
- 2016-12-04
- ivanhoe
-
- 2015-10-01
На самом деле вам не нужно отказываться от использования цикла
while()
.Тот же объект WP_Post уже хранится в свойствеpost
:$query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // now $query->post is WP_Post Object, use: // $query->post->ID, $query->post->post_title, etc. } }
Actually, you don't need to refuse to use
while()
loop. Same WP_Post Object is already stored inpost
property:$query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // now $query->post is WP_Post Object, use: // $query->post->ID, $query->post->post_title, etc. } }
-
`if` является избыточным.`if` is redundant.
- 2
- 2017-01-26
- Akkumulator
-
Нет,if не является лишним.В данном случае это так,но в большинстве производственных ситуаций у вас есть код для выполнения междуif и while.No, `if` is not redundant. In this exact case it is, but in most production situations, you have code to execute between the if and the while.
- 2
- 2017-03-27
- magi182
-
@magi182 Что делает его лишним в данном случае.Люди должны узнать,когда это использовать.@magi182 Which makes it redundant, in this exact case. People should learn when to use this.
- 2
- 2017-04-03
- frodeborli
-
@frodeborli,Самое приятное в утверждениях,которые начинаются с «люди должны»,это то,что вы почти всегда можете заменить «люди не будут»,и утверждение все равно проверяется как истинное.@frodeborli, The nice thing about statements that start with "people should" is that you can almost always substitute "people won't" and the statement still tests as true.
- 4
- 2017-04-06
- magi182
-
@magi182 Я,наверное,мог бы сделать сотню хороших строк кода,дополняющих приведенный выше код.@magi182 I could probably make a hundred nice to have code lines to complement the above code.
- 1
- 2017-04-08
- frodeborli
-
это должен быть выбранный ответthis should be the chosen answer
- 0
- 2018-10-27
- bysanchy
-
- 2019-04-16
вы также можете использовать
get_posts( $args )
вместоwp_Query()
,что даст вам список сообщенийyou can also use
get_posts( $args )
instead ofwp_Query()
, which will give you a list of posts
При выполнении запроса с методом WP_Query я получил объект.Я понимаю,что тогда я могу сделать цикл для отображения материалов.Но моя цель - ничего не отображать,вместо этого я хочу получить некоторые данные поста,выполнив что-то вроде «foreach ...».Как я могу получить массив данных публикации,которые можно просмотреть и получить данные?