Вопрос или проблема
У меня есть пользовательский тип сообщения 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
объект и увидеть их.
$res->query_vars
$res->meta_query
(в данном случае)$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
, полученный с помощью параметров запроса.
Основные шаги
-
Создание объекта 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);
-
Проверка наличия записей:
После выполнения запроса важно убедиться, что были найдены подходящие записи. Для этого используйте методhave_posts()
:if($res->have_posts()) { // обработка данных } else { // нет записей }
-
Получение ID первой записи:
Если записи найдены, вы можете получить ID первой записи с помощью свойстваposts
, как показано ниже:$id = $res->posts[0]->ID; // assuming only 1 post is returned
-
Извлечение значения мета-поля
baz
:
Для извлечения значения мета-поляbaz
используйте функциюget_post_meta()
, передав ей ID записи:$true_baz = get_post_meta($id, 'baz', true); // 'true' возвращает одно значение
-
Сравнение полученного значения:
После того как вы получите значение мета-поля, можете сравнить его с заданным значением$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 с легкостью.