Intereting Posts
Как предотвратить WordPress от загрузки старых версий jquery в wp_head () ;? Как отключить https с сайта wordpress? Безопасный способ echo wp_trim_words сохранять импортированные сообщения в виде черновиков Настройка wp-activate.php quicktags "link" кнопка не работает, но все остальные кнопки делают Скрыть выделение текста из архива, но показывать на одиночных сообщениях Добавление запроса в шаблон пользовательской страницы Двадцать двенадцать метаданных входа – изменение и перемещение Добавить баннер в панель инструментов 4 столбца, упорядоченная по алфавиту с элементами, сгруппированными (и помеченными) их первой буквой как добавить активный класс в плейлист, и сделать css для него отображать пользователя WordPress, который опубликовал ожидающий пост другого пользователя Пользовательские постоянные ссылки не работают с локальной установкой LAMP Только выполнять / выполнять определенные короткие коды

Как вернуть другое сообщение, кроме запроса

Я пытаюсь изменить основной запрос, когда отображается одна страница, вместо этого возвращает другую страницу. Я подумал, что это один из немногих случаев, когда query_posts () для постоянного изменения основного запроса будет подходящим, но я все равно получаю исходный идентификатор сообщения во многих случаях, когда выполняю get_the_ID() и т. Д.

Какой был бы подходящий момент (крюк действия) и метод для достижения этого, казалось бы, простого изменения запроса страницы?

Пример: всякий раз, когда запрашивается идентификатор страницы 5, вместо этого загружайте идентификатор страницы 10.

Если вы можете получить доступ к идентификатору своего сообщения, это означает, что запрос уже запущен. Итак, в этом случае вы больше не можете использовать pre_get_posts .

Решение заключалось бы в том, чтобы обернуть ваш код в условное get_the_permalink() , а затем использовать такие функции, как get_the_permalink() или get_the_title() которые принимают идентификатор сообщения, чтобы получить контент для другого сообщения:

 if( get_the_ID() == '5' ){ get_the_title( 10 ); } else { // Main loop } 

Вышеупомянутое должно использоваться в ваших шаблонах.

Другим разумным и лучшим подходом было бы использование перенаправления. Проверьте идентификатор сообщения, а затем перенаправьте пользователя, если условные совпадения:

 if( get_the_ID() == '5' ) { wp_safe_redirect( get_the_permalink( 10 ) ); exit(); } 

Это можно использовать либо в functions.php либо в заголовке ваших шаблонов.

Кроме того, вы можете использовать хак, чтобы использовать pre_get_posts .

 add_action( 'pre_get_posts', 'my_function' ); function my_function( $query ) { // Remove this action hook so we don't go into an infinite loop remove_action( 'pre_get_posts', 'my_function' ); // Get a list of posts belonging to this query $posts = get_posts( $query->query ); // If there is only one post in the array and its ID matches // what we're looking for, then we can alter the main query if( $query->is_main_query() && sizeOf( $posts ) == '1' && $post[0]->ID == '5' ) { // Now we can modify the query here } }