Проверить, существует ли значение мета-ключа
Допустим, у меня есть несколько записей с мета-ключом "videoid". Значение этого мета-ключа разное для каждой записи (и должно быть уникальным). При добавлении новой записи, как я могу проверить, существует ли уже videoid с таким же значением в других записях? Я использовал это как ссылку для добавления пользовательского мета-бокса в админку WordPress: http://codex.wordpress.org/Function_Reference/add_meta_box

Просто выполните запрос с помощью WP_Query
, используя параметры произвольных полей (meta_query
), чтобы найти записи с нужным мета-ключом и значением. Пример кода:
// аргументы для запроса по вашему ключу
$args = array(
'post_type' => 'your_post_type',
'meta_query' => array(
array(
'key' => 'videoid',
'value' => $new_posts_videoid // например: '111'
)
),
'fields' => 'ids'
);
// выполняем запрос
$vid_query = new WP_Query( $args );
$vid_ids = $vid_query->posts;
// делаем что-то, если пара мета-ключ-значение существует в другой записи
if ( ! empty( $vid_ids ) ) {
// ваш код здесь
}
Нет необходимости использовать query_post()
— см.:
Когда следует использовать WP_Query, query_posts() или get_posts()?
. Если вам нужен полный массив объектов записей, а не только их ID, удалите параметр 'fields' => 'ids'
.

$q_vid возвращает не просто список ID, а весь объект wp_query. Смотрите мой ответ для исправления

верно, спасибо. Буду признателен, если в следующий раз вы исправите это редактированием моего ответа @JordanLejuwaan

Ответ пользователя ialocin неверно утверждает, что wp_query, сохраненный в переменной, просто выведет массив ID. Вместо этого возвращается весь объект WP_Query, поэтому для получения массива ID постов необходимо использовать ->posts.
// Аргументы для запроса по вашему ключу
$args = array(
'post_type' => 'ВАШ_ТИП_ЗАПИСИ',
'meta_query' => array(
array(
'key' => 'ВАШЕ_МЕТА_ПОЛЕ',
'value' => '111'
)
),
'fields' => 'ids'
);
// Выполняем запрос
$query = new WP_Query($args);
$duplicates = $query->posts;
// Делаем что-то, если пара ключ-значение существует в другом посте
if (!empty($duplicates)) {
// Ваши действия
}

Или оберните это в функцию:
function meta_value_exists($your_meta_value) {
$args = array(
'post_type' => 'YOUR_POST_TYPE',
'post_status' => 'publish',
'numberposts' => 1,
'meta_key' => 'your_meta_field',
'meta_value' => $your_meta_value,
);
$current_post = get_posts($args);
if( $current_post ) {
return true;
} else {
return false;
}
}
Тогда вы можете просто проверить ваше мета-значение:
$video_id = 1234;
if(meta_value_exists($video_id){
// сделать что-то, если существует
} else {
// сделать что-то, если не существует
}

Найдено:
$args = array(
'meta_query' => array(
array(
'key' => 'videoid',
'value' => $_POST['videoid']
)
)
);
$videoQuery = new WP_Query( $args );
if ( $videoQuery->have_posts() ) :
while ( $videoQuery->have_posts() ) :
$videoQuery->the_post(); ?>
echo "<h3 class='post-title'>" . the_title() . "</h3>";
endwhile;
endif;
