Получите уникальный пост по мета-значению с помощью wp_query

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

Я использую wp_query для получения моих записей по мета-значению. Одно из мета-значений имеет одинаковый текст, хранящийся в базе данных. Позвольте привести пример.

Название поста  Мета-значение
hello1         text1
hello2         text2 
hello3         text2

Таким образом, в базе данных существуют три поста. Первый имеет ‘text1’ в мета-значении. Остальные два имеют ‘text2’, хранящееся в мета-значении.

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

hello1        text1
hello2        text2

Третий пост я не хочу, чтобы отображался, потому что он имеет такое же мета-значение, как пост с заголовком hello2. Таким образом, я хочу показать только уникальные посты с мета-значением, как вы понимаете.

Как это возможно сделать с помощью wp_query?

Это мой код на данный момент, который возвращает все непустые посты на основе мета-значения text.

$args = array(

            'cat'=>'44',
        'posts_per_page'=>'16',
        'post_type' => 'post',
        'post_status' => 'publish',

        'meta_query' => [
            'metavalue1' => [ 'key' => 'Meta_value', 'value' => '', 'compare' => '!=' ],
            'price1'=> [ 'key' => 'price_euro', 'value' => '30', 'compare' => '>','type'=>'NUMERIC' ],
],
    'orderby' => 'price1',
    'order' => 'ASC'
    );

    $wp_query = new WP_Query($args);

Любая помощь приветствуется. Я использую этот код в своем файле Search.php, который отвечает за поиск.

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

$args = [
    'cat' => '44',
    'posts_per_page' => '16',
    'post_type' => 'post',
    'post_status' => 'publish',

    'meta_query' => [
        'metavalue1' => [
            'key' => 'Meta_value',
            'value' => '',
            'compare' => '!='
        ],
        'price1'=> [
            'key' => 'price_euro',
            'value' => '30',
            'compare' => '>',
            'type' => 'NUMERIC'
        ],
    ],

    'orderby' => 'price1',
    'order' => 'ASC',
    'posts_per_page' => 1,
];

$wp_query = new WP_Query($args);

Кстати: Чтобы сделать ваш код более читабельным, старайтесь придерживаться одного стиля. Если вы используете короткий синтаксис массива ([ ]) где-то? -> Используйте его повсюду и избегайте array(). Если вы используете 'key' => 'value'? Не используйте 'key'=>'value' где-то еще.

Ответ или решение

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

Проблема

У вас имеется несколько постов с одинаковым значением мета-ключа, и вы хотите отобразить только уникальные посты на основе этого мета-значения. В вашем случае ситуация выглядит следующим образом:

  • hello1text1
  • hello2text2
  • hello3text2

Вы хотите получить только hello1 и hello2, исключив hello3, так как его мета-значение уже представлено в посте hello2.

Возможное решение

К сожалению, стандартный WP_Query не поддерживает возврат уникальных значений напрямую. Однако вы можете извлечь посты и затем обработать результаты, чтобы отфильтровать дубликаты. Ниже приведен пошаговый процесс, как это можно сделать.

Шаг 1: Запрос данных

Сначала создайте базовый запрос для извлечения всех постов с заданными мета-значениями. Например:

$args = array(
    'cat' => '44',
    'posts_per_page' => -1, // Извлечь все посты
    'post_type' => 'post',
    'post_status' => 'publish',
    'meta_query' => array(
        'metavalue1' => array(
            'key' => 'Meta_value',
            'value' => '',
            'compare' => '!='
        ),
        'price1' => array(
            'key' => 'price_euro',
            'value' => '30',
            'compare' => '>',
            'type' => 'NUMERIC'
        ),
    ),
);

$wp_query = new WP_Query($args);

Шаг 2: Отбор уникальных постов

Теперь, после того как вы получили все необходимые посты, вы можете использовать PHP для фильтрации полученных данных и получения уникальных мета-значений.

$unique_posts = array();
$unique_meta_values = array();

if ($wp_query->have_posts()) {
    while ($wp_query->have_posts()) {
        $wp_query->the_post();

        // Получаем значение мета-ключа
        $meta_value = get_post_meta(get_the_ID(), 'Meta_value', true);

        // Проверяем, если мета-значение уникально
        if (!in_array($meta_value, $unique_meta_values)) {
            // Если уникальное, добавляем в массив уникальных постов
            $unique_posts[] = get_the_ID(); // Или другой атрибут, который вам нужен
            $unique_meta_values[] = $meta_value; // Добавляем мета-значение в массив уникальных значений
        }
    }
    wp_reset_postdata();
}

// Вывод уникальных постов
foreach ($unique_posts as $post_id) {
    echo get_the_title($post_id) . ' - ' . get_post_meta($post_id, 'Meta_value', true) . '<br>';
}

Итог

Этот процесс позволяет вам получить уникальные посты по мета-значению, используя возможности WP_Query и PHP для обработки данных. Не забывайте следить за производительностью, особенно если у вас большое количество постов, так как запрос всех постов может быть ресурсоемким. Если вы работаете с большими объемами данных, стоит рассмотреть использование специализированных методов кэширования или хранения данных.

SEO Оптимизация

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

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

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

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