基于自定义字段对搜索结果进行分类

时间:2014-09-23 作者:Tom Oakley

我有两组帖子-一些帖子有一个自定义字段(真/假)。所以有一个自定义字段的custom_field) 的值true, 一组进去,其他的(带false, 或者更常见的情况是custom_field 在那篇文章中不存在)进入另一组。

当我搜索某个内容时,我希望能够分别显示这两组帖子,即第一组结果(true) ,然后显示第二组结果(false)). 这一切都很好,但我还需要能够显示每个集合的结果计数。我写了一个WP_Query 我认为这是可行的:

$postsTrue = new WP_Query( array( "s" => get_search_query(), "meta_key" => "custom_field", "meta_value" => "true") );
$countTrue = $postsTrue->post_count;
所以这个应该得到结果的数量,其中custom_fieldtrue. 然而,它却得到了所有的结果(对于两者truefalse).

我如何编写一个查询来只获取custom_fieldtrue?

3 个回复
SO网友:Bernie

而不是$postsTrue->post_count;, 尝试$postsTrue->found_posts; 返回查询的帖子数。$post_count 统计显示的所有帖子。

参考号:codex

SO网友:Mike F

我想你最好的朋友是meta_compare 打开参数WP_Query. 你尝过那些吗?

此外,这只是一个想法,但使用meta_value_num 如果WP强制转换,可能会起作用bool(true)1.

SO网友:thecodezombie

正如Mike所说,我首先想到的是您的实际meta\\u值是什么。无论它是存储为字符串还是布尔值。。。因为那肯定会把事情搞砸的。

其次,我建议使用高级自定义字段,而不是使用WordPress的普通字段。这让用户更难搞糟,因为在这种情况下,可以通过下拉菜单或单选按钮来处理;甚至是一个复选框(我更喜欢你的情况)。

勾选框将返回一个布尔值,因此您可以执行meta\\u查询以查找yes,然后执行查询以查找not yes(即no或空)。

最后,一点个人喜好。。。以数组形式传入WP\\u查询参数;使其更易于阅读。

$YesArgs = array(
        \'s\' => get_search_query(),
        \'meta_query\' => array(
          array(
             \'key\' => \'custom_field\',
             \'value\' => \'yes\'
          )
        )
    );

$postsTrue = new WP_Query($YesArgs);

$NoArgs = array(
        \'s\' => get_search_query(),
        \'meta_query\' => array(
          array(
             \'key\' => \'custom_field\',
             \'value\' => \'yes\',
             \'compare\' => \'!=\'
          )
        )
    );

$postsFalse = new WP_Query($NoArgs);

结束

相关推荐

CPT Meta Searching

我正在开发一个使用自定义帖子类型和元数据的WP插件。我试图实现的是元数据的可搜索性。下面是我找到的一些可以很好地搜索元数据的代码,但是我无法让它在CPT页面上显示搜索字符串。add_filter( \"pre_get_posts\", \"custom_search_query\"); function custom_search_query( $query ) { $custom_fields = array( \"pctracker_company\",