WPML: WP_Query + suppress_filters не работает

Вопрос или проблема

Я работаю над исправлением сайта на 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. Однако, как показала практика, это не дало ожидаемого результата.

Анализ ситуации

  1. Обратное значение suppress_filters:
    Параметр suppress_filters предназначен для указания, следует ли отключать фильтры для данного запроса. Если вы хотите, чтобы запрос учитывал фильтры, этот параметр должен быть установлен в false, однако если WPML или какие-либо другие плагины применяют фильтры на запросы, они могут не сработать в случае его установки в false. В связи с некоторыми изменениями в обработке языковых фильтров, вы можете попробовать установить его в true, чтобы подавить все фильтры, и затем вручную управлять языковыми параметрами.

  2. Параметр 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, // Добавьте этот параметр
    );

Рекомендации по решению проблемы

  1. Попробуйте изменить suppress_filters: Установите suppress_filters в true, чтобы фактически подавить неприменяемые фильтры. Это может помочь избежать влияния других плагинов или функций на ваш запрос.

  2. Добавьте параметр языка: Как упоминалось выше, сделайте ваш запрос специфическим для языка, установив lang в аргументах WP_Query.

  3. Проверка на существование фильтров: Убедитесь, что в вашей теме или плагинах не прописаны фильтры, которые могут повлиять на WP_Query. Возможно, стоит произвести поиск по коду на наличие вызовов pre_get_posts, которые могли бы обрабатывать язык.

Заключение

Ошибки в настройке запросов в WPML могут возникать по различным причинам, начиная от неправильного использования параметров и заканчивая конфликтами с другими плагинами. Применив указанные выше рекомендации, вы сможете адаптировать свой запрос, удовлетворяющий требованиям многоязычного контента. Удачи в решении проблемы, и не стесняйтесь обращаться за дополнительной помощью, если она будет нужна!

Оцените материал
Добавить комментарий

Капча загружается...