Как получить метазначение из WP_Query?

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

У меня есть пользовательский тип сообщения foo с метаполями, называемыми bar и baz. Теперь я получаю объект WP_Query следующим образом:

$args = array( 
       'post_type'      => 'foo', 
       'meta_key'       => 'bar', 
       'meta_value'     => $bar_value,
       'posts_per_page' => 10,
);
$res = new WP_Query($args);

Теперь я хочу проверить, равен ли значение baz выбранного сообщения $baz_value. Как это сделать?

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

Решение:

if($res->have_posts()) { 
    $id = $mail_res->posts[0]->ID; // слепо предполагаю, что есть только 1 сообщение с baz = baz_value
    $true_baz = get_post_meta($id, 'baz')[0];

    if($true_baz == $baz) {
        //успех
    } else {
        //ошибка
    }
} else {
    //ошибка
}

Вы пробовали это:

$args = array( 
   'post_type'      => 'foo', 
   'meta_key'       => 'bar', 
   'meta_value'     => $bar_value,
   'posts_per_page' => 10,
);
$res = new WP_Query($args);

 на 
  $args = array( 
   'post_type'      => 'foo', 
   'meta_key'       => 'bar', 
   'meta_value'     => $bar_value,
   'meta_compare'   => '=',
   'posts_per_page' => 10,
);
$res = new WP_Query($args);

Читайте это: WP_Query

Аргументы запроса находятся в нескольких местах в объекте запроса. Вы можете var_dump объект и увидеть их.

  1. $res->query_vars
  2. $res->meta_query (в данном случае)
  3. $res->query

Пункты 1 и 3 будет легче всего использовать. Простая синтаксис PHP-объектов и массивов даст вам необходимую информацию.

<?php
  $args = array(
    'post_type' => 'myvideos',
    'posts_per_page' => '1'
  );

  $query = new WP_Query($args);
?>

<?php if($query->have_posts()):while($query->have_posts()): $query->the_post(); ?>

 
/*
где url - это имя вашего пользовательского поля, и мы извлекаем значение по индексу один, так как метаданные могут иметь массив значений url.
*/

  <?php $data = get_post_meta(get_the_id(), 'url')[0];?>

<?php endwhile; else: endif;?>

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

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

Основные шаги

  1. Создание объекта WP_Query:
    Вам необходимо инициализировать объект WP_Query с аргументами запроса, где вы будете фильтровать записи по мета-ключу bar. Вот пример:

    $args = array( 
       'post_type'      => 'foo', 
       'meta_key'       => 'bar', 
       'meta_value'     => $bar_value,
       'posts_per_page' => 10,
    );
    $res = new WP_Query($args);
  2. Проверка наличия записей:
    После выполнения запроса важно убедиться, что были найдены подходящие записи. Для этого используйте метод have_posts():

    if($res->have_posts()) {
       // обработка данных
    } else {
       // нет записей
    }
  3. Получение ID первой записи:
    Если записи найдены, вы можете получить ID первой записи с помощью свойства posts, как показано ниже:

    $id = $res->posts[0]->ID; // assuming only 1 post is returned
  4. Извлечение значения мета-поля baz:
    Для извлечения значения мета-поля baz используйте функцию get_post_meta(), передав ей ID записи:

    $true_baz = get_post_meta($id, 'baz', true); // 'true' возвращает одно значение
  5. Сравнение полученного значения:
    После того как вы получите значение мета-поля, можете сравнить его с заданным значением $baz_value:

    if ($true_baz == $baz_value) {
       // успех
    } else {
       // ошибка
    }

Полный пример кода

Полный код будет выглядеть следующим образом:

$args = array( 
    'post_type'      => 'foo', 
    'meta_key'       => 'bar', 
    'meta_value'     => $bar_value,
    'posts_per_page' => 10,
);
$res = new WP_Query($args);

if ($res->have_posts()) {
    $id = $res->posts[0]->ID; // Получаем ID первой записи
    $true_baz = get_post_meta($id, 'baz', true); // Получаем значение мета-поля 'baz'

    if ($true_baz == $baz_value) {
        // Действия при успешном сравнении
    } else {
        // Обработка ошибки
    }
} else {
    // Обработка случая, когда записи не найдены
}

Заключение

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

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

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