Intereting Posts
Получение текущего идентификатора элемента меню из определенного меню Как установить значение по умолчанию для «Alt text» в диалоговом окне загрузки изображения? Справка с инструкцией if внутри цикла while получить персонализированный тип сообщения Как я дезинфицирую функцию str_replace в переменных javascript Является ли функция функции изображения WP функцией обрезкой изображений? WP Content Slideshow Название уровня последней категории для должности Переадресовать категорию в первый доступный пост для детей Безопасный wordpress_logged_in cookie Открыть сообщения в редакторе в режиме «Текст» по умолчанию Доступ только к главной странице и панели администратора Как мы можем знать, что мы не на странице редактирования Как прокручивать пользовательские сообщения в окне редактирования admin Портфолио-шаблон не будет показывать элементы Запланированные частные сообщения публикуются немедленно

Сброс данных сообщения в предыдущий цикл в вложенных циклах

Я пытаюсь использовать вложенные циклы с плагинами сообщений в сообщениях. Петли работают, но проблема возникает после второго вложенного цикла ($ issue). Я хочу снова получить доступ к циклу публикации $, но данные по-прежнему являются данными $ issue.

wp_reset_query() сбрасывает обратно в основной цикл в single.php, который я не хочу.

Я мог бы использовать get_posts() вместо нового WP_Query, но я хочу иметь возможность использовать get_template_part() .

Как вернуть данные обратно в цикл публикации, чтобы второй заголовок публикации опубликовал публикацию, а не вопрос, название?

Вот мой код в single.php:

 $publication = new WP_Query( array( 'connected_type' => 'publication_to_post', 'connected_items' => $post->ID, 'fields' => 'ids', 'posts_per_page' => 1, ) ); if ( $publication->have_posts() ) { while ( $publication->have_posts() ) : $publication->the_post(); echo '<h2>Publication title = '.get_the_title().'</h2>'; $pub_id = get_the_ID(); $issue = new WP_Query( array( 'connected_type' => 'publication_to_issue', 'connected_items' => $pub_id, 'fields' => 'ids', 'posts_per_page' => 1, ) ); if ( $issue->have_posts() ) { while ( $issue->have_posts() ) : $issue->the_post(); // need to be able to use template parts in here echo '<h2>Issue title = '.get_the_title().'</h2>'; endwhile; } // This currently returns the issue title, not the publication title echo '<h2>Publication title = '.get_the_title().'</h2>'; endwhile; } 

Solutions Collecting From Web of "Сброс данных сообщения в предыдущий цикл в вложенных циклах"

Я собираюсь ответить на это сам, но это был очень умный @simonwheatley из Code for the People, который решил это для меня.

Вместо использования wp_reset_postdata() или wp_reset_query() вы можете использовать следующее:

 $publication->reset_postdata(); 

Где $ публикация – это ваш объект запроса.

Рабочий код теперь выглядит так:

 $publication = new WP_Query( array( 'connected_type' => 'publication_to_post', 'connected_items' => $post->ID, 'fields' => 'ids', 'posts_per_page' => 1, ) ); if ( $publication->have_posts() ) { while ( $publication->have_posts() ) : $publication->the_post(); echo '<h2>Publication title = '.get_the_title().'</h2>'; $pub_id = get_the_ID(); $issue = new WP_Query( array( 'connected_type' => 'publication_to_issue', 'connected_items' => $pub_id, 'fields' => 'ids', 'posts_per_page' => 1, ) ); if ( $issue->have_posts() ) { while ( $issue->have_posts() ) : $issue->the_post(); // need to be able to use template parts in here echo '<h2>Issue title = '.get_the_title().'</h2>'; endwhile; $publication->reset_postdata(); } echo '<h2>Publication title = '.get_the_title().'</h2>'; endwhile; } 

Прежде всего, я думаю, что можно использовать get_posts() в сочетании с setup_postdata() . С их помощью вы можете использовать теги шаблонов, как в обычном цикле WordPress.

Но вы можете использовать эту функцию также в своих вложенных циклах:

 # make sure $post is the global in your scope (which should be the case in single.php) global $post; if ( $publication->have_posts() ) { while ( $publication->have_posts() ) : $publication->the_post(); echo '<h2>Publication title = '.get_the_title().'</h2>'; $pub_id = get_the_ID(); # preserve the current post in the higher loop $preserve_post = get_post(); $issue = new WP_Query( array( 'connected_type' => 'publication_to_issue', 'connected_items' => $pub_id, 'fields' => 'ids', 'posts_per_page' => 1, ) ); if ( $issue->have_posts() ) { while ( $issue->have_posts() ) : $issue->the_post(); // need to be able to use template parts in here echo '<h2>Issue title = '.get_the_title().'</h2>'; endwhile; } # set the global back to your first loop post $post = $preserve_post; setup_postdata( $post ); // This currently returns the issue title, not the publication title echo '<h2>Publication title = '.get_the_title().'</h2>'; endwhile; } wp_reset_query();