GET_POSTS查询匹配的结果太多

时间:2014-10-16 作者:jimlongo

我在一个函数中有一个查询,它返回我不想要的匹配项,例如,当$id=116时,它还返回meta\\u键“funds\\u id”为11687的结果。

 public function list_related_docs($id){

    $docs_args = array(
        \'post_type\'     => \'publication\',
        \'post_status\'   => \'publish\',
        \'posts_per_page\'=> -1,
        \'orderby\'   => \'meta_value_num title\',
        \'order\'     => \'ASC\',
        \'meta_key\'  => \'fund_list_order\',
        \'limit\'     => 4,
        \'suppress_filters\' => 0,
        \'meta_query\'    => array(
                                \'relation\'  => \'AND\',
                                                array(
                                                    \'key\' => \'funds_id\',
                                                    \'value\' => $id,
                                                    \'compare\' => \'LIKE\'
                                                ),
                                                array(
                                                    \'key\' => \'fund_list_order\',
                                                    \'compare\' => \'EXISTS\',
                                                )
                                            )
        );
    $docs_posts = get_posts($docs_args);

   // more stuff
}
我尝试使用“compare”=>“=”,但没有返回任何结果。

谢谢

2 个回复
SO网友:Courtney Ivey

那么,您需要包括类型比较,或者这里应用字母数字比较。

在这种情况下,您应该添加\'type\' => \'numeric\'.

Using Your Class Function

<?php
public function list_related_docs($id){

            $docs_args = array(
                    \'post_type\'     => \'publication\',
                    \'post_status\'   => \'publish\',
                    \'posts_per_page\'=> -1,
                    \'orderby\'   => \'meta_value_num title\',
                    \'order\'     => \'ASC\',
                    \'meta_key\'  => \'fund_list_order\',
                    \'limit\'     => 4,
                    \'suppress_filters\' => 0,
                    \'meta_query\'    => array(
                        \'relation\'  => \'AND\',
                            array(
                                \'key\' => \'funds_id\',
                                \'value\' => $id,
                                \'compare\' => \'=\',
                                \'type\' => \'numeric\',
                            ),
                            array(
                                \'key\' => \'fund_list_order\',
                                \'compare\' => \'EXISTS\',
                            )
                        )
                    );
            $docs_posts = get_posts($docs_args);
            // more stuff
}

SO网友:Tom J Nowell

搜索代码所基于的插件表明,问题中的所有内容都是您自己的修改。

您面临的问题是,您正在序列化PHP数组并将其存储在post meta中,然后尝试对其运行查询。这行不通,也永远行不通。

您提供的示例值a:1:{i:0;s:3:"11687";} 相当于array( 11687 ). 与其存储包含单个值的数组,不如只存储数字。如果需要存储多个数字,可以使用相同的键存储多个post meta,或者将它们作为列表存储在单独的post meta中。但如果您希望能够在SQL中运行比较,或与值进行匹配,则不能使用序列化数据。

一旦数据被存储为一个数字,而不是一个串行对象,Courtney给出的答案就会起作用。然而,Courtneys的回答合理地假设它是一个数字,而不是像大多数其他人所假设的那样是一个序列化的PHP字符串,因此,为什么它最初对您不起作用。

如果您纯粹出于分类目的使用ID,那么您可以:

设置后父项使用自定义分类法,其中ID是术语名称,否则,在处理数据库时,通常不在表中存储序列化结构,尤其是在随后要查询其内容时。

结束

相关推荐

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

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