当前位置: 首页 > 知识库问答 >
问题:

WordPress:WP_查询,包含来自某个类别的帖子和meta_查询,或者只包含另一个meta_查询

姬泰
2023-03-14

我有一些问题与WordPress和WP_Query。我想让帖子按meta_query和/或类别过滤,但我有以下问题:第一种类型的帖子有一个名为“类型”的自定义字段,必须用“练习”来填充,帖子必须在一个名为“级别”的类别中(这将在之前设置)。第二类帖子只有名为“类型”的自定义字段,必须用“测试”来填充。

我不知道如何把这两个条件凑在一起。正因为如此,我试图将它分成两个查询,然后合并它,就像这样:

$firstArgs = array(
        'posts_per_page'=> -1,
        'category_name' => $level,
        'meta_key'      => 'duration',
        'orderby'       => 'meta_value_num',
        'order'         => 'DESC',
        'meta_query' => array(
             'key' => 'type',
             'value' => 'exercise'
        )     
);

$secondArgs = array(
        'posts_per_page' => -1,
        'meta_key'       => 'duration',
        'orderby'        => 'meta_value_num',
        'order'          => 'DESC',
        'meta_query' => array(
             'key' => 'type',
             'value' => 'test'
        )
);
$first_query = new WP_Query( $firstArgs );
$second_query = new WP_Query( $secondArgs );
$result = new WP_Query();
$result->posts = array_merge($first_query->posts, $second_query->posts);

这个方法的问题是,我想按自定义字段“duration”DESC对帖子进行排序。如果我合并这两个数组,排序就不是我想要的方式。

有人知道更好的方法吗?如果是一个查询,排序就会起作用,我认为它更有效。

谢谢你的帮助!

共有2个答案

祁和通
2023-03-14

我找到了一个适合我的答案。首先,我按照Dhruv告诉我的那样检索数据,然后,我使用usort函数对结果进行排序,但使用匿名函数。

usort($your_posts, function($a, $b)
{
      $val1 = get_post_meta($a->ID, 'duration', true );
      $val2 = get_post_meta($b->ID, 'duration', true );
      return  -1*($val1 - $val2); // sort desc
});

也许这不是最好的方法,但它对我有效。:-)

冯通
2023-03-14
$firstArgs = array(
        'posts_per_page'=> -1,
        'category_name' => $level,
        'meta_key'      => 'duration',
        'orderby'       => 'meta_value_num',
        'order'         => 'DESC',
        'meta_query' => array(
             'key' => 'type',
             'value' => 'exercise'
        )     
);

$secondArgs = array(
        'posts_per_page' => -1,
        'meta_key'       => 'duration',
        'orderby'        => 'meta_value_num',
        'order'          => 'DESC',
        'meta_query' => array(
             'key' => 'type',
             'value' => 'test'
        )
);

$firstArgs = get_posts($firstArgs);
$secondArgs = get_posts($secondArgs);
$your_posts = array_unique(array_merge($firstArgs,$secondArgs),SORT_REGULAR);

_e('<pre>');
print_r($your_posts);   
_e('</pre>');

为了更好地理解,请访问这里

 类似资料:
  • 我尝试使用多个自定义字段显示结果,同时按第一个自定义字段(startdate)排序结果。我看到的建议让我尝试了以下方法: 问题是,如果没有meta_key参数,结果会默认过滤帖子的日期。当我添加meta_key参数对结果进行排序时,我得到的每一篇文章都有一个meta_key等于开始日期。通过添加这些meta_key参数,语句似乎完全忽略了meta_query数组中的条件。我如何让查询排序的开始日期

  • 我想在一个帖子查询中返回每个帖子的元值总数。 因此,例如,我查询以获取具有自定义文章类型的参数的文章,并且作者是当前作者。这一部分很容易——返回实际的帖子,也可以统计帖子。但是我想从查询中的每个帖子中计算一个元值,并返回一个总数。meta值是一个统计该帖子被偏爱多少次的值。元键是“simplefavorites_count”,我在这里使用这个插件作为参考: https://favoritepost

  • 我有3个元字段:日期(日期格式字符串)、位置和顾问。 设置meta_键时,我可以按日期字段拉入POST和orderby: 然而,我无法用更复杂的meta_query来实现这一点: 基本上,我想拉所有的职位,有一个元开始_日期大于今天的日期和顺序由这些日期。 作为一个旁注-你能在说位置键和仍然按日期键进行元查询搜索吗? 任何帮助都很感激...这是我第一次尝试用meta订购,并且找到了一些好的帖子,但

  • 表的结构是: null 以下是我目前掌握的信息:

  • 问题内容: 当表开始增长时,我担心WHERE子句中IN的性能。有没有人对这种查询有更好的策略?子查询返回的记录数比TradeLine表中的记录数增长得慢得多。TradeLine表本身以每天10个的速度增长。 谢谢你。 编辑:我使用了将子查询从WHERE移到FROM的想法。我对有助于此新查询的所有答案投了赞成票。 问题答案: 子句中的子查询不依赖于外部查询中的任何内容。您可以安全地将其移到子句中;一

  • 我想用JPA编写以下查询,以检索按和分组的指令的计数。我知道以下SQL可以工作: 我想从这个查询中获取结果,并将其映射到一个新的对象调用: 问题所在