Intereting Posts
Что такое простой, но безопасный способ получения содержимого файла в WordPress? WooCommerce: отключить налогообложение для конкретного адреса Удалите базовый пробой в постоянных ссылках иерархического пользовательского типа сообщения Как скрыть поле автора конкретного пользователя? Использование mediaelement для отображения галереи аудио Как удалить страницы таксономии изображений из моей темы и из Google? Переводить содержимое базы данных с помощью функции __ ($ message) RW Meta Box, сообщение об ошибке Выход и перенаправление с использованием меню WP Отображение аудиопроигрывателя в качестве предварительного просмотра в аудиозаписе в WP3.6 Выход короткого кода, отображаемый только в верхней части страницы Как удалить определенные категории из сообщений? Как хранить или кэшировать пользовательские данные корзины покупок для сеанса каждого пользователя Пользовательская категория типа сообщения в постоянной ссылке NextHen stylesheets ищет localhost

Неопределенное свойство: WP_Query :: $ post

Я работаю над некоторыми довольно сложными сравнениями метаданных и с небольшими проблемами, правильно ссылаясь на результаты моего запроса. Первый запрос для установки $team_is_home работает нормально, но как только я попытаюсь захватить идентификатор сообщений, в которых $team_is_home идет немного сбой, и я получаю предупреждения: «Неопределенное свойство: WP_Query :: $ post»

 $args = array( 'post_type' => 'match_report', 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'report_home-select', 'value' => $team_id, 'compare' => '=', ), ) ); $hometeams = new WP_Query($args); $team_is_home = $hometeams->found_posts; $scorehome = get_post_meta($hometeams->post->ID, 'report_homescore'); 

Как я могу ссылаться на $hometeams->post->ID чтобы избежать получения этого предупреждения?

Прежде всего, поле post WP_Query – это текущий идентификатор сообщения, а не post post. Но я не думаю, что вы должны использовать его перед вызовом the_post() .

Обычно вы должны делать это следующим образом:

 $args = ... $hometeams = new WP_Query( $args ); $teamishome = $hometeams->have_posts(); while ( $hometeams->have_posts() ) { $hometeams->the_post(); $scorehome = get_post_meta($post->ID, 'report_homescore', true); // you want only one meta, not all array I guess. ... } 

Вы можете сделать это также с foreach

 $args = ... $hometeams = new WP_Query( $args ); foreach($hometeams->posts as $key => $post){ echo get_post_meta($post->ID, 'report_homescore', true); } 

Если вы var_dump($hometeams); вы увидите, что $hometeams->post устанавливается в первое сообщение в результатах запроса еще до того, как $hometeams->the_post . WP_Query инициализирует его автоматически, если у вас есть записи в результирующем наборе .

Предупреждение «Неопределенное свойство» возникает, когда ваш результирующий набор пуст, и поэтому $hometeams->post не может быть установлен / инициализирован.

Вы должны проверить, что у вас есть заполненный $hometeams->post прежде чем пытаться его использовать. Если вы используете while ( $hometeams->have_posts() ) { как предлагается в одном ответе или foreach($hometeams->posts as $key => $post){ как в другом, вы зацикливаете на $hometeams->posts и так полностью $hometeams->post проблему с $hometeams->post .

Другим вариантом будет …

 if (!empty($hometeams->post)) { $scorehome = get_post_meta($hometeams->post->ID, 'report_homescore'); } 

… однако, поскольку ваш запрос не содержит 'posts_per_page' => 1 вам нужно использовать цикл или вы получите только одно из потенциально большого количества сообщений в наборе результатов.

Не забудьте запустить reset_postdata после того, как ваш вторичный Loop сбросит $post или wp_reset_query если это необходимо.