来自存储为序列化数组的META_VALUE的自定义WP查询

时间:2012-03-30 作者:James Morrison

我使用Magic Fields 2多复选框来存储可以分配给案例研究的服务。数据在WordPress中以序列化数组的形式存储,我需要一些帮助来提取“相关帖子”。

我知道不能简单地将数组用作meta\\u值(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\\u值、提取它并仅显示相关的条目?

我尝试在“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>\';

    }
}
如果您有任何帮助,我们将不胜感激!

非常感谢,

詹姆斯

1 个回复
SO网友:Rutwick Gangurde

如果你在while 循环,使用get\\u the\\u 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
}
检查此项。顺便说一句,您可以将数组设置为元字段值(但通过使用add\\u post\\u meta的代码,而不是后期编辑屏幕上的via post meta框)。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post