Intereting Posts
Создание настраиваемого фида для категорий, который включает в себя изображение с первым сообщением Любой крючок для предварительного обновления плагина – либо массовое, либо одиночное обновление плагина Какова возможность доступа к WP-Admin? Я хочу исключить конкретную категорию в боковой панели Заказ результатов WP_User_Query на идентификаторы пользователей, используемые в параметре include Все обновленные плагины исчезли Показать сообщение в визуальном композиторе с пользовательским html Как добавить локальных пользователей в WordPress без пароля по электронной почте? Данные реформата внутри вложенного массива Вторая страница архива пуста Как проверять зависимости для конкретной страницы и помещать их в очередь Как добавить сообщение в меню Включить поиск WordPress на основе запроса? S = <запрос> Пользовательские постоянные ссылки и фильтры? Поддомен подстановки для одного и того же сайта

Is_single () условный тег возвращает null в запросе

Попытка выяснить, почему это не сработает для меня. Я просто пытаюсь запустить цикл всех сообщений и страниц и пометить их как столбцы и страницы в массиве. Но is_single() условно не работает, все сообщения отображаются как страницы. И если я удалю is_page() он просто даст мне null

 $data = array(); $args = array( 'posts_per_page' => '-1', 'post_type' => array('post', 'page'), 'orderby' => 'menu_order', 'order' => 'ASC', ); $loop = new WP_Query($args); if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post(); $id = $loop->post->ID; if(is_single()) { $type = 'article'; } elseif(is_page()) { $type = 'page'; } $data[$id] = array( 'uri' => $loop->post->post_name, 'title' => apply_filters( 'the_title', $loop->post->post_title ), 'type' => $type, 'entry' => apply_filters( 'the_content', $loop->post->post_content ), ); endwhile; endif; wp_reset_postdata(); 

Solutions Collecting From Web of "Is_single () условный тег возвращает null в запросе"

is_single() и is_page() относятся к основному запросу и, насколько я знаю, не изменяются, чтобы соответствовать отдельным сообщениям в Loop. Они относятся к типу страницы не к отдельным сообщениям. Попробуйте, и вы должны увидеть, что я имею в виду:

 $data = array(); $args = array( 'posts_per_page' => '-1', 'post_type' => array('post', 'page'), 'orderby' => 'menu_order', 'order' => 'ASC', ); $loop = new WP_Query($args); if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post(); $id = $post->ID; the_title(); var_dump($post->post_type,is_single(),is_page(),$loop->is_single(),$loop->is_page()); echo '<br>'; endwhile; endif; wp_reset_postdata(); 

Простое решение – просто проверить тип сообщения

 if('post' == $post->post_type) { $type = 'article'; } elseif('page' == $post->post_type) { $type = 'page'; } 

Также это,

 $id = $loop->post->ID; 

является чрезмерно сложным. $post->ID – это одно и то же значение. Или используйте get_theID()

is_single() и is_page() работают с глобальным $wp_query и не будут работать в этом контексте. Если вы пытаетесь определить тип сообщения, проверьте значение $post->post_type

 if( 'post' == $post->post_type ) { $type = 'article'; } elseif( 'page' == $post->post_type ) { $type = 'page'; } 

Вы можете заставить is_single при замене основного запроса:

 $draft_post_query = new WP_query(array( 'post_status' => 'draft', 'post_type' => array('post'), 'post__in' => array($post_id) )); $draft_post = $draft_post_query->post; global $wp_query, $post; $wp_query = $draft_post_query; $post = $draft_post; $wp_query->is_single = true; $wp_query->is_singular = true;