Проблема с WP_Query и Polylang

19 нояб. 2014 г., 20:07:41
Просмотры: 17.5K
Голосов: 6

В разрабатываемой мной теме есть шаблон, отображающий 5 записей с помощью стандартного цикла:

            <?php
          $my_query = new WP_Query('showposts=5');
          while ($my_query->have_posts()) : $my_query->the_post(); ?>

и так далее...

Есть страница (Actualites), использующая этот шаблон. Теперь я добавил Polylang и создал другую страницу (News), которая использует тот же шаблон. У записей блога не будет английского перевода, но я хочу, чтобы англоязычные читатели попадали на страницу News, которая будет "такой же", как Actualites (на французском).

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

0
Все ответы на вопрос 3
1

ПОНЯТНО - я понял, что старые записи, уже находящиеся в базе данных, НЕ имеют английского перевода, и в этом проблема с моим циклом. Когда я добавляю новую запись, у меня есть возможность предоставить перевод, который затем появляется на английской странице.

Просматривая документацию, я обнаружил, что также могу показывать запись по умолчанию, когда перевода нет, с помощью чего-то вроде:

<?php query_posts(array('post_type' => 'post','lang' => 'fr')); // принудительно запрашиваем французские записи ?>
if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php global $post;
    if($post_id = pll_get_post($post->ID, pll_current_language())) { // получаем переведенную запись (на текущем языке), если она существует
        $post = get_post($post_id);
        setup_postdata($post);
    }?>

... делайте что угодно в вашем цикле ...

19 нояб. 2014 г. 20:50:49
Комментарии

Похоже, что это решение больше не работает. Есть ли альтернатива?

Arturo Arturo
23 сент. 2021 г. 19:37:50
1

Разве это не проще?

        $paged = get_query_var('page') ?: 1;
        $args = array(
            's'              => get_search_query(),
            'posts_per_page' => 8,
            'paged'          => (int) $paged,
            'fields'         => 'ids',
            'post_type'      => array('any'),
            'tax_query'      => array(
                                    array(
                                    'taxonomy' => 'language',
                                    'field' => 'slug',
                                    'terms' => pll_current_language(),
                                    )
                                ),

        );
        $query = new WP_Query( $args );
8 февр. 2024 г. 01:54:43
Комментарии

Ваш ответ можно улучшить, добавив дополнительную подтверждающую информацию. Пожалуйста, [отредактируйте] его, чтобы включить дополнительные детали, такие как ссылки или документацию, чтобы другие могли убедиться в правильности вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы, в справочном центре.

User User
8 февр. 2024 г. 16:24:10
0

Установите 'lang' => pll_current_language() в вашем запросе, чтобы получить текущий язык.

$args = array(
    'posts_per_page' => 5,
    'lang' => pll_current_language(), // Получаем записи на текущем языке
);

$my_query = new WP_Query($args);
8 февр. 2024 г. 08:15:43