Wordpress:从特定类别的帖子生成标签数组

时间:2009-06-18 19:22:45

标签: mysql wordpress

使用Wordpress,我需要从特定类别的帖子中生成一系列标签(术语)。

例如,如果我有两个类别,“apple”和“orange”,我想要一组仅在苹果类别的帖子中使用的术语 - 而不是橙色类别。 (但是,如果在两者中都使用了一个术语,则应该包含该术语)

我尝试过使用一些wordpress函数,但没有一个返回我想要的东西(包括tag_cloud函数)。我的猜测是我留下了一个Query调用...但到目前为止我的所有查询都没有给我我想要的列表。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

以下是使用WordPress功能

完成此操作的方法
<?php
$tags = array();

$posts = get_posts('category_name=new-cat&numberposts=-1'); //get all posts in category

foreach ($posts as $post){
    $posttags = get_the_tags($post->ID); //check for tags
    if ($posttags){
        foreach ($posttags as $posttag){
            $tags[$posttag->term_id] = $posttag->name; // add to array of tag ids => names
        }
    }
}
print_r($tags);
?>

这可能比原始SQL查询更可取,因为当WordPress更新其数据库架构时,这些查询通常会中断。

答案 1 :(得分:1)

我不确定您是否可以使用WordPress提供的功能完成您想要的任务。这是一个似乎可以做你想做的SQL查询:

SELECT tag_terms.name, COUNT(wp_posts.ID) FROM wp_posts 

INNER JOIN wp_term_relationships AS cat_term_relationships ON wp_posts.ID= cat_term_relationships.object_ID 
INNER JOIN wp_term_taxonomy AS cat_term_taxonomy ON cat_term_relationships.term_taxonomy_id= cat_term_taxonomy.term_taxonomy_id 
INNER JOIN wp_terms AS cat_terms ON cat_term_taxonomy.term_id= cat_terms.term_id 

INNER JOIN wp_term_relationships AS tag_term_relationships ON wp_posts.ID= tag_term_relationships.object_ID 
INNER JOIN wp_term_taxonomy AS tag_term_taxonomy ON tag_term_relationships.term_taxonomy_id= tag_term_taxonomy.term_taxonomy_id 
INNER JOIN wp_terms AS tag_terms ON tag_term_taxonomy.term_id= tag_terms.term_id 

WHERE cat_term_taxonomy.taxonomy='category' AND cat_terms.name='apple' AND tag_term_taxonomy.taxonomy='post_tag'
GROUP BY tag_terms.name

它的要点是你将wp_posts表与分类表连接几次以获得所需类别中的帖子ID,然后将这些ID与分类表连接几次以获得相关标签。 / p>