Wordpress meta_query键数组

时间:2011-05-13 11:06:35

标签: wordpress

我正在使用:http://www.farinspace.com/how-to-create-custom-wordpress-meta-box/函数创建一些自定义元框。

我的WP_Query看起来像这样:

            $args = array(
                'post_type' => 'testimonials',
                'post_status' => 'publish',
                'orderby' => checked((bool) $instance['testimonials_random'], true, false) ? 'rand' : 'id',
                'posts_per_page' => $testimonials_number,
                'paged' => get_query_var('page'),
                'meta_query' => array(
                    array(
                        'key' => '_my_meta["addtosidebar"]',
                        'value' => 'on',
                        'compare' => 'LIKE'
                    )
                )
            );
            $query = new WP_Query($args);

输入复选框addtosidebar如下所示: <input type="checkbox" name="_my_meta[addtosidebar]" <?php checked((bool) $meta['addtosidebar'], true); ?> class="checkbox" />

您是否知道如何在meta_query中访问密钥?

谢谢, CIP

2 个答案:

答案 0 :(得分:4)

我认为你不能这样做,因为链接到元值的教程存储在一个数组中,然后将其序列化为一个数据库字段。所以你最终在数据库中得到这样的东西:a:4:{s:12:"addtosidebar";s:2:"on";s:3:"foo";s:3:"bar";}

以下元查询可能有效,但最好使用单独的自定义字段。

'meta_query' => array(
  array(
    'key' => '_my_meta',
    'value' => 's:12:"addtosidebar";s:2:"on";',
    'compare' => 'LIKE'
  )
)

答案 1 :(得分:1)

it was like this: 'meta_query' => array( array( 'key' => '_my_meta', 'value' => 'addtosidebar', 'compare' => 'LIKE' ) ) – CIPPO Design

这对我有用,我认为应该加上答案。有一件事,比如理查德指出,数据库中的条目是序列化的。所以'LIKE'基本上只会在该字符串中查找'value''addtosidebar'。

例如,如果我有这样的元数组:

发布1:

$myMeta = array('medium' => 'video', 'sometext' => 'a beautiful video')

帖子2:

$myMeta = array ('medium' => 'image', 'sometext' => 'a beautiful image of a video button')

这意味着在'视频'上使用比较'LIKE'将返回两者,因为视频也可以在第二篇文章的'sometext'值中找到。为了阻止我必须添加引号以限制它:

$query->set( 'meta_query' , array(
                              array(
                                'key' => 'blogInfo',
                                'value' => '"video"',
                                'compare' => 'LIKE'
                            )
                            ));

希望能够帮助某些人并使我能够理解。

ps:抱歉,我不够高调只是评论。