Intereting Posts
Session Expired, когда адрес (URL) и адрес сайта (URL) WordPress различны Действительно ли этот код эффективен – или есть лучший способ? Разметка страницы для страницы пользовательской таксономии Структура меню с невозможностью обновления ссылок Как отключить автоматическую работу для Nivo Slider? Ограничить выбор изображенного изображения до высоты и ширины пикселей Ссылка на паутину WordPress всегда ведет к домашней странице Ошибка: файлы cookie заблокированы или не поддерживаются вашим браузером. Как заменить textarea в плагине с помощью wp_editor Добавление тегов и ввода в профиль пользователя Вопрос по архитектуре сайта WordPress Пользовательская переписывающая ссылка не работает Заменить комментарии фиктивным текстом Есть ли способ получить 3 + мерный массив из одной команды MySql Как получить содержимое корзины woocommerce без каких-либо действий?

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

Я пытаюсь использовать вложенные циклы с плагинами сообщений в сообщениях. Петли работают, но проблема возникает после второго вложенного цикла ($ 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();