Пользовательский запрос WP из meta_value, хранящийся в виде сериализованного массива

Я использую многоэкранный блок Magic Fields 2 для хранения сервисов, которые могут быть назначены для Case Studies. Данные хранятся как сериализованный массив в WordPress, и мне нужна помощь для извлечения «связанных сообщений».

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

Это код, который у меня есть до сих пор:

<?php $related_case_study_args = array( 'post_type' => 'case-studies', 'posts_per_page' => '-1', // get all posts ); $related_case_study_loop = new WP_Query($related_case_study_args); if ( $related_case_study_loop->have_posts() ) : ?> <p>See Related Case Studies:</p> <?php while ( $related_case_study_loop->have_posts() ) : $related_case_study_loop->the_post(); ?> <p class="related"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> <?php endwhile; endif; wp_reset_query(); ?> 

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

Я попытался использовать этот код внутри оператора while, чтобы убедиться, что данные верны правильно, но без каких-либо успехов:

 // returns an array as this is a multicheck field in Magic Fields 2 $services = get_post_meta($post->ID, 'services', true); // foreach item in the array foreach ($services as $service) { if ( sanitize_title($service_title) == sanitize_title($service) ) { echo '<p>' . esc_attr($service) . '</p>'; } } 

Любая помощь здесь будет оценена!

Большое спасибо,

Джеймс

Если вы находитесь внутри цикла while, используйте get_the_ID ().

 // returns an array as this is a multicheck field in Magic Fields 2 if(get_post_meta(get_the_ID(), 'services', true)){ $services = get_post_meta(get_the_ID(), 'services', true); $services = maybe_unserialize($services); // foreach item in the array foreach ($services as $service) { if ( sanitize_title($service_title) == sanitize_title($service) ) { echo '<p>' . esc_attr($service) . '</p>'; } } } else { //No services set } 

Проверь это. Btw, вы можете установить массив в качестве значения мета-поля (но с помощью кода с помощью add_post_meta, а не через метатекст через post после экрана редактирования).