Вопрос или проблема
Я работаю над исправлением сайта на WordPress с многоязычной поддержкой, используя WPML. У этого сайта два разных домена, один для английского и один для французского. Французский – основной язык.
Для всего сайта, когда я извлекаю записи, язык сайта учитывается в запросе, но в footer.php
темы есть запрос для извлечения некоторых уведомлений, который возвращает записи на любом языке. Вот этот запрос:
<?php
$args = array(
'post_type' => 'post',
'cat' => 8,
'posts_per_page' => 1,
'meta_key' => 'traffic-level',
'meta_value' => 1,
'suppress_filters' => false
);
$query = new WP_Query( $args );
wp_reset_query();
if( $query->have_posts() ):
while( $query->have_posts() ) : $query->the_post();?>
вывод записи...
<?php endwhile;
endif;?>
На всех остальных страницах suppress_filters' => false
не установлен. Я добавил это, потому что увидел в форуме плагина, но это пока не работает должным образом. Я также проверил свой functions.php
, чтобы посмотреть, есть ли действие pre_get_posts
, которое могло бы мешать запросу, и его нет.
Что-то я пропускаю в этом запросе? Что еще я могу сделать, чтобы это исправить?
Спасибо за любую помощь
Я столкнулся с такой же проблемой, кажется, suppress_filters
нужно установить в true, чтобы ты действительно отключил эти фильтры!
Ответ или решение
Вопрос о том, почему WP_Query с параметром suppress_filters
не работает как ожидалось в контексте многоязычного сайта на WordPress с использованием WPML, требует внимательного анализа. Рассмотрим проблему подробнее и предложим возможные решения.
Описание проблемы
На вашем многоязычном сайте установлены два домена: один для английского языка, другой — для французского, который является основным языком. При выполнении запросов к постам язык сайта правильно учитывается, за исключением запроса в footer.php
, который должен возвращать определенные посты (оповещения) с конкретной категорией и метаполем, но возвращает посты на любом языке.
Исходный код вашего запроса выглядит следующим образом:
$args = array(
'post_type' => 'post',
'cat' => 8,
'posts_per_page' => 1,
'meta_key' => 'traffic-level',
'meta_value' => 1,
'suppress_filters' => false
);
Вы добавили параметры suppress_filters
в попытке настроить запрос так, чтобы он уважал языковые фильтры, применяемые WPML. Однако, как показала практика, это не дало ожидаемого результата.
Анализ ситуации
-
Обратное значение suppress_filters:
Параметрsuppress_filters
предназначен для указания, следует ли отключать фильтры для данного запроса. Если вы хотите, чтобы запрос учитывал фильтры, этот параметр должен быть установлен вfalse
, однако если WPML или какие-либо другие плагины применяют фильтры на запросы, они могут не сработать в случае его установки вfalse
. В связи с некоторыми изменениями в обработке языковых фильтров, вы можете попробовать установить его вtrue
, чтобы подавить все фильтры, и затем вручную управлять языковыми параметрами. -
Параметр
lang
:
WPML использует параметрlang
для фильтрации контента. Убедитесь, что вы добавляете язык в аргументы запроса. Каждый язык имеет свои идентификаторы и необходимо убедиться, что посты запрашиваются с учетом текущего языка. Пример:$args = array( 'post_type' => 'post', 'cat' => 8, 'posts_per_page' => 1, 'meta_key' => 'traffic-level', 'meta_value' => 1, 'suppress_filters' => true, 'lang' => ICL_LANGUAGE_CODE, // Добавьте этот параметр );
Рекомендации по решению проблемы
-
Попробуйте изменить suppress_filters: Установите
suppress_filters
вtrue
, чтобы фактически подавить неприменяемые фильтры. Это может помочь избежать влияния других плагинов или функций на ваш запрос. -
Добавьте параметр языка: Как упоминалось выше, сделайте ваш запрос специфическим для языка, установив
lang
в аргументах WP_Query. -
Проверка на существование фильтров: Убедитесь, что в вашей теме или плагинах не прописаны фильтры, которые могут повлиять на WP_Query. Возможно, стоит произвести поиск по коду на наличие вызовов
pre_get_posts
, которые могли бы обрабатывать язык.
Заключение
Ошибки в настройке запросов в WPML могут возникать по различным причинам, начиная от неправильного использования параметров и заканчивая конфликтами с другими плагинами. Применив указанные выше рекомендации, вы сможете адаптировать свой запрос, удовлетворяющий требованиям многоязычного контента. Удачи в решении проблемы, и не стесняйтесь обращаться за дополнительной помощью, если она будет нужна!