我不认为WP_Query
也为您返回元字段。所以你需要在帖子上循环并运行get_post_meta()
手动。假设一个office
最多有一个_octopus_id
, 你可以这样写:
// here we will store the ids
$octopiIds = [];
$query = new WP_Query([
\'post_type\' => \'office\',
\'post_status\' => \'any\',
\'posts_per_page\' => 10,
\'meta_query\' => [
[
\'key\' => \'_octopus_id\',
],
]
]);
while ($query->have_posts()) {
$query->the_post();
$octopiIds[] = get_post_meta(get_the_ID(), \'_octopus_id\', true);
}
wp_reset_postdata();
你真的需要分页吗
WP_Query
? 如果没有,我建议您通过
$wpdb
s
get_col()
, 因为它可以为您节省大量查询。上述代码将创建至少11个查询(1个用于
WP_Query
, 每个帖子1个,以获得元数据),但您只能在一个帖子中完成此操作。
(未经测试)
global $wpdb;
$octopiIds = $wpdb->get_cols(
$wpdb->query("
SELECT DISTINCT pm.meta_value
FROM {$wpdb->posts} AS p
INNER JOIN {$wpdb->postmeta} AS pm
ON p.ID = pm.post_id AND pm.meta_key = \'_octopus_id\'
WHERE pm.meta_value != \'\' AND pm.meta_value IS NOT NULL
")
);
另外,如果您在这里存储octopi和办公室之间的某种关系,请考虑使用分类法,而不是Posteta,因为这将大大加快速度。