Как я могу получить_сообщения, если идентификатор сообщения находится в массиве пользовательской мета?

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

Затем я хочу сделать get_posts для вложений, идентификатор которых существует в этом массиве, но массив возвращается как пустой.

$p_downloads = get_posts(array(
    'post_type'      => 'attachment',
    'post_mime_type' => 'application/pdf',
    'meta_key'       => 'bv_media_meta_procedure',
    'meta_value'     => $post->ID,
    'orderby'        => 'title',
    'order'          => 'ASC',
    'posts_per_page' => -1
));

В настоящее время метаданные сообщения bv_media_meta_procedure для одного из вложений выглядят следующим образом:

array (size=1)
  0 => 
    array (size=3)
      0 => string '238' (length=3)
      1 => string 'null' (length=4)
      2 => string 'null' (length=4)

Таким образом, на странице с идентификатором 238 я ожидаю увидеть вложение, возвращаемое функцией get_posts.

Но он возвращается пустым, как же так?


person Lee    schedule 13.02.2018    source источник


Ответы (1)


Я узнал об этом, прочитав эту статью: http://brianshim.com/webtricks/query-wordpress-custom-field-array/

Пользовательская мета хранится в виде сериализованных массивов, и, слегка изменив функцию get_posts, теперь возвращает правильные результаты.

$p_downloads = get_posts(array(
    'post_type'      => 'attachment',
    'post_mime_type' => 'application/pdf',
    'meta_key'       => 'bv_media_meta_procedure',
    'meta_value'     => '"'.$post->ID.'"',
    'meta_compare'   => 'LIKE',
    'orderby'        => 'title',
    'order'          => 'ASC',
    'posts_per_page' => -1
));
person Lee    schedule 13.02.2018