Я добавляю собственные мета-файлы в свои файлы вложений и хочу сохранить три идентификатора страницы для каждого вложения в массиве.
Затем я хочу сделать get_posts для вложений, чей ID существует в этом массиве, но массив возвращается как пустой.
$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.
Но он возвращается пустым, как получается?
Я узнал, что после прочтения этой статьи: 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
));
Других решений пока нет …