Проверить, существует ли значение мета-ключа

4 нояб. 2013 г., 14:10:05
Просмотры: 18.1K
Голосов: 2

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

2
Комментарии

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

kaiser kaiser
4 нояб. 2013 г. 14:39:28

Я хотел сказать, что использовал этот код (по указанной ссылке) в своем собственном плагине. Неважно, удалил эту часть.

SomeoneS SomeoneS
4 нояб. 2013 г. 14:58:43
Все ответы на вопрос 4
2

Просто выполните запрос с помощью 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'.

4 нояб. 2013 г. 15:16:05
Комментарии

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

jetlej jetlej
19 окт. 2014 г. 04:49:36

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

Nicolai Grossherr Nicolai Grossherr
19 окт. 2014 г. 13:17:30
0

Ответ пользователя 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)) {
    // Ваши действия
}
19 окт. 2014 г. 04:55:26
0

Или оберните это в функцию:

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 {
   // сделать что-то, если не существует
}
24 авг. 2016 г. 20:09:30
0

Найдено:

$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;
4 нояб. 2013 г. 15:00:27