Intereting Posts
Пользовательские $ _GET vars в записи wordpress с постоянной ссылкой Переписать страницу с пропуском перед именем страницы Как получить идентификатор экрана страницы добавить пользовательский HTML css с js не работает wp_register () отображает вход в систему как администратор сайта Как добавить функцию «Нажмите, чтобы увеличить изображение», с расширенным открытием изображения во всплывающем окне? WordPress Ajax Data Security Как поддерживать соответствие стандартам W3C темы разбиение на страницы для пользовательского цикла с несколькими типами сообщений как изменить формат «опубликованной даты» на странице edit.php (страницы)? Постоянная ссылка только на сообщения WP_list_table bulk_action получает редактирование и удаление другая таблица стилей только для одного шаблона страницы ACF – Пользовательские поля исчезли Включение угловых кронштейнов в предварительные разделы

Использование WP_Query в «parse_query» или «pre_get_post» в Posts2Posts

ОБНОВЛЕНИЕ :

Крючок работает с «классическим» фильтром WordPress (например, post__in ), поэтому, вероятно, это проблема Posts2Posts. Я все еще ищу предложения, если у кого-то есть идея.

ОРИГИНАЛЬНАЯ ПОЧТА

Я пытаюсь получить все сообщения, отображаемые номером проблемы на страницах архива. Проблемы – это настраиваемый тип сообщения (связанный с post2post, поэтому я использую parse_query вместо pre_get_post )

 <?php function categories_by_issue ($query) { if (! $query->is_category() || ! $query->is_main_query()) return; $query->set( 'connected_type', 'issue_to_posts'); $query->set( 'connected_items', 71); // 71 needs to be dynamic $query->set( 'nopaging', true); } add_action('parse_query', 'categories_by_issue'); ?> 

Этот крюк действия отлично работает ! Проблема в следующем: мне нужно получить идентификатор проблемы с другим запросом. (ID и номер выпуска, конечно, разные, у моей проблемы №3 есть идентификатор «71»)

Я попытался добавить WP_Query в свой крючок, который в основном сломал все это. Я могу получить номер своей проблемы, но основной запрос, наконец, показывает все сообщения.

 <?php function categories_by_issue ($query) { if (! $query->is_category() || ! $query->is_main_query()) return; $issues = new WP_Query ( /* ... */); $issue_id = $issues->get_posts()[0]->ID; var_dump($issue_id); // -> 71 : My ID is correct $query->set( 'connected_type', 'issue_to_posts'); $query->set( 'connected_items', $issue_id); $query->set( 'nopaging', true); } add_action('parse_query', 'categories_by_issue'); ?> 

Есть ли способ, которым я мог бы запросить некоторую информацию на моем крючке, в идеале без привлечения прямого запроса SQL?

Solutions Collecting From Web of "Использование WP_Query в «parse_query» или «pre_get_post» в Posts2Posts"

Вы вызываете бесконечный цикл, потому что вы вызываете WP_Query внутри WP_Query , где находится хук, поэтому вы снова и снова подключаете его к parse_query . Чтобы избежать этого, поставьте следующее в начале своей функции обратного вызова:

 // avoid infinite loop remove_action( 'parse_query', __FUNCTION__ ); 

Обратите внимание, что это может быть только незначительная техничность, но, на мой взгляд, правильный крюк для использования был бы pre_get_posts .

Я не мог решить эту проблему, но нашел обходной путь: я получил свой идентификатор проблемы на parse_request-крюке и использовал его в parse_query (я создал класс с переменной $ issue_id var, но глобальная переменная тоже должна быть прекрасной).

Все еще не знаю, почему вы не можете использовать WP_Query непосредственно в parse_query, но я открыл билет на Posts2Posts github: https://github.com/scribu/wp-posts-to-posts/issues/483

Я не пытаюсь это сделать. Но как насчет создания функции для извлечения issue_id ? И помните, что wp_reset_postdata() для WP_Query() имеет важное значение.

 function get_the_issue_id() { $issues = new WP_Query( /* .... */ ); $issue_id = $issues->get_posts()[0]->ID; wp_reset_postdata(); //it's important return (int) $issue_id; } 

Теперь выполните parse_query :

 function categories_by_issue ($query) { if (! $query->is_category() || ! $query->is_main_query()) return; $query->set( 'connected_type', 'issue_to_posts'); $query->set( 'connected_items', get_the_issue_id() ); //using the function $query->set( 'nopaging', true); } add_action('parse_query', 'categories_by_issue');