Wordpress:计算标签使用的总次数

时间:2014-02-20 00:02:18

标签: php sql count wordpress

我成功重新调整现有代码以计算特定标记内的帖子总数,然后打印总和。我根据现有的片段拼凑了这个,虽然它有效,但我发现效率非常低。

理想情况下,如果我可以计算所有代码中的帖子数量并返回总数,那就太棒了,所以我不需要硬编码$term_name

我知道那里有一个循环...这是我第一次真正处理PHP,所以虽然这很令人兴奋,但它让我想起我有很多需要学习的东西。

<?php
$taxonomy = "post_tag"; // can be category, post_tag, or custom taxonomy name

// Using Term Name
$term_name = 'Cookies';
$term = get_term_by('name', $term_name, $taxonomy);

$term_name1 = 'Juice';
$term1 = get_term_by('name', $term_name1, $taxonomy);

$term_name2 = 'Milk';
$term2 = get_term_by('name', $term_name2, $taxonomy);

// Fetch the count, sum and print.
echo ($term->count + $term1->count + $term2->count);
?>

稍微澄清一点:我想计算每个标签下的帖子,然后将它们相加,即使重复计算帖子。我正在使用标签作为帖子的一种库存。假设我们使用标签来识别图片中的项目,您可以用它来标记20,000个不同的项目。

1 个答案:

答案 0 :(得分:1)

实际上,您需要做的第一件事是建立一个使用的术语列表,然后获取计数。这两个都可以在单个数据库查询中完成。

$taxonomy = 'post_tag'; //the post type you want to look up
global $wpdb; //get instance of database connection
$sql = $wpdb->prepare("SELECT terms.name,taxonomy.count
        FROM wp_terms AS terms 
        INNER JOIN wp_term_taxonomy AS taxonomy ON (terms.term_id = taxonomy.term_id)
        WHERE taxonomy = %s;",$taxonomy);
$results = $wpdb->get_results($sql);

if ( $results ){
    foreach ( $results as $result ){
        echo('<p>'.$result->name.' has a count of '.$result->count.'</p>');
    }   
}

请注意:您应该使用$ wpdb-&gt;前缀而不是硬编码“wp _”来进一步优化答案...但如果这仅供您自己使用而不是重新分发,则无需担心关于那个。

编辑:

根据对原始问题的评论,备用SQL可以是:

$taxonomy = 'post_tag'; //the post type you want to look up
global $wpdb; //get instance of database connection
$sql = $wpdb->prepare("SELECT sum(taxonomy.count)
        FROM wp_terms AS terms 
        INNER JOIN wp_term_taxonomy AS taxonomy ON (terms.term_id = taxonomy.term_id)
        WHERE taxonomy = %s;",$taxonomy);
$result = $wpdb->get_var($sql);

echo("There are a total of $result tag matches");

注意:如果您有2个帖子,每个帖子使用3个不同的标签,您将获得6的结果(这是您在评论中想要的内容......但不是其他人可能想要的内容)。