我想按国家顺序列出工作(工作是自定义职位类型)。结果集中要优先考虑的国家/地区由WP CMS中的用户定义。首先列出配置的国家,然后我想控制其余行的顺序。
e、 g.如果他们选择“gb”,我希望结果集如下所示:
gb
gb
au
es
fr
sw
sw
我需要使用pre\\u get\\u posts来实现这一点。希望这一切都有意义。
这是我刚刚得到的。为了便于阅读,我硬编码了键/值,而不是显示CMS类/值。
add_action(
\'pre_get_posts\',
function(WP_Query $query) {
if ($query->is_main_query()) {
$country_order = array(
\'meta_query\' => array(
array (
\'key\' => \'job_country\',
\'value\' => \'gb\',
\'compare\' => \'=\'
)
)
);
$query->set(\'meta_query\', $country_order);
}
}
);
这只返回“gb”,其他的都不返回,我有点纠结于从这里走到哪里。任何帮助都将不胜感激。
更新:根据Tom的评论,这里有一些代码可以在使用$working\\u list按我需要的方式排序后实现我想要的东西。本例中的自定义职位类型为“job”。
$args = array(
\'post_type\' => \'job\',
\'posts_per_page\' => -1,
\'post__in\' => $working_list,
\'orderby\' => \'post__in\'
);
return get_posts($args);
所以$working\\u list本质上包含一个post id数组,由于一些非Wordpress特定的PHP编码,所有post id的顺序都是正确的。没有
\'orderby\' => \'post__in\'
$args中的元素get\\u posts()中返回的帖子顺序不一致。
最合适的回答,由SO网友:Tom J Nowell 整理而成
This isn\'t possible with WP_Query
. 为了实现您的目标,需要进行多个查询,每个国家一个,分别获取结果,然后在PHP中手动组合。
您也不能使用meta_query
要排序,meta_query
用于过滤/搜索帖子元,这非常昂贵,并且随着元表变大而变慢。Post meta针对以下方面进行了优化get_post_meta
, 当您已经知道post ID/键时获取值。它从未打算按值搜索/过滤帖子,这就是为什么添加了分类法。
如果要将排序更改为使用meta,请参阅the sorting official docs, 显示您可以按meta_value
或meta_value_num
对于单个键(meta_value_key
), 定义使用meta_key_value
和orderby
, 只有有限的排序选项:
“meta\\u value”-请注意,“meta\\u key=keyname”也必须存在于查询中。还请注意,排序将按字母顺序进行,这对于字符串(即单词)来说是很好的,但对于数字(例如1、3、34、4、56、6等,而不是您自然期望的1、3、4、6、34、56等)来说可能是意外的。对于数值,请使用“meta\\u value\\u num”。如果要将元值强制转换为特定类型,还可以指定“meta\\u type”。可能的值为“NUMERIC”、“BINARY”、“CHAR”、“DATE”、“DATETIME”、“DECIMAL”、“SIGNED”、“TIME”、“UNSIGNED”,与“$meta\\u query”中的值相同。使用“meta\\u type”时,也可以相应地使用“meta\\u value\\u*”。例如,当使用DATETIME作为“meta\\u type”时,可以使用“meta\\u value\\u DATETIME”来定义订单结构。
无法列出这些值以及它们的优先级或顺序。可以使用post id列表执行此操作,它将按照指定的顺序返回post,但在所有这些情况下,在执行查询之前已经知道了顺序。
如果不执行多个WP_Query
然后在PHP中提取结果,编译一个post ID数组并将其传递给pre_get_posts
. 这将是不可靠和非常缓慢的。
我能预见的唯一可行的途径是通过插件与软件(如Elastic Search或Algolia)集成。