WordPress:WP_Query 个类别的帖子和 meta_query 或另一个 meta_query
WordPress: WP_Query with posts from a category and meta_query or only another meta_query
我在使用 WordPress 和 WP_Query 时遇到了一些问题。
我想通过 meta_query and/or 类别过滤 posts,但我遇到以下问题:
第一种类型的 post 有一个名为 "type" 的自定义字段,必须用 "exercise" 填充,并且 post 必须在名为 "Level" 的类别中(这将在之前设置)。
第二种posts只有自定义字段"type",必须填写"test".
我不知道如何将这两个条件放在一起。
因此,我尝试将其拆分为两个查询,然后将其合并,如下所示:
$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 对 post 进行排序。如果我合并这两个数组,排序不是我想要的那样。
有谁知道更好的方法吗?如果是一个查询,排序就可以了,我认为这样效率更高。
感谢您的帮助!
$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>');
为了更好地理解,请访问 here
我找到了适合我的答案。
首先,我按照 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
});
也许这不是最好的方法,但它对我有用。 :-)
我在使用 WordPress 和 WP_Query 时遇到了一些问题。 我想通过 meta_query and/or 类别过滤 posts,但我遇到以下问题: 第一种类型的 post 有一个名为 "type" 的自定义字段,必须用 "exercise" 填充,并且 post 必须在名为 "Level" 的类别中(这将在之前设置)。 第二种posts只有自定义字段"type",必须填写"test".
我不知道如何将这两个条件放在一起。 因此,我尝试将其拆分为两个查询,然后将其合并,如下所示:
$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 对 post 进行排序。如果我合并这两个数组,排序不是我想要的那样。
有谁知道更好的方法吗?如果是一个查询,排序就可以了,我认为这样效率更高。
感谢您的帮助!
$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>');
为了更好地理解,请访问 here
我找到了适合我的答案。 首先,我按照 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
});
也许这不是最好的方法,但它对我有用。 :-)