-1

我有一个自定义字段,比如“mood”,我需要显示所有具有“mood”=“grumpy”的帖子的标签列表。是否可以在不获取所有帖子然后为每个帖子获取标签的情况下执行此操作?

4

2 回答 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 回答