我有一个自定义字段,比如“mood”,我需要显示所有具有“mood”=“grumpy”的帖子的标签列表。是否可以在不获取所有帖子然后为每个帖子获取标签的情况下执行此操作?
问问题
581 次
2 回答
1
您可以使用函数 get_posts();
$args = array(
'meta_key' => 'mood',
'meta_value' => 'grumpy',
);
$your_posts = get_posts( $args );
于 2012-11-01T12:41:15.727 回答
0
未经测试,但这应该可以实现您想要的。只需注意拼写错误和遗漏的分号!
虽然您没有得到整个帖子,但您仍然需要在数据库中查询带有“mood”=“grumpy”的帖子的 ID,所以除非您有很多帖子,否则可能更容易选择答案@多雷尔给了。
$query = $wpdb->prepare('
SELECT ID
FROM %1$s
LEFT JOIN %2$s
ON %1$s.ID = %2$s.post_id
WHERE %2$s.meta_key = "mood"
AND %2$s.meta_value = "grumpy"
', $wpdb->posts, $wpdb->postmeta
);
$ids = $wpdb->get_col($query);
if(!empty($ids)) : foreach($ids as $post_id) :
$tags = wp_get_post_tags($post_id, $args);
if(!empty($ids)) : foreach($tags as $tag) :
$tags[] = $tag->name;
endforeach;
endif;
endforeach;
endif;
// Now you have an array of Tag names, output them as you wish
Codex for wp_get_post_tags
= http://codex.wordpress.org/Function_Reference/wp_get_post_tags
Codex for wp_get_object_terms
(查看$args
可用的内容wp_get_post_tags
)=
http://codex.wordpress.org/Function_Reference/wp_get_object_terms#Argument_Options
于 2012-11-01T16:50:10.397 回答