wpdb - 为特定类别中的自定义字段添加值

时间:2015-06-17 17:42:54

标签: php wordpress wpdb

我有一个名为“积分”的自定义字段。这是一个数值,所以有些帖子有2个点,有些有10个等等。

我想计算给定类别中所有帖子的“点数”总数,这些帖子的自定义字段“cf_Category”的值为“章节构建”

因此,可以查询类别X中的所有帖子,其元键“cf_Category”的值是“章节构建”,然后将元键“点”的值相加,然后回显该数字。

这有意义吗?我可以将所有帖子的所有积分相加,但是很难将其限制为一个类别。

提前致谢!

2 个答案:

答案 0 :(得分:1)

听起来你需要一个子查询。在SQL中,你想要这样的东西:

SELECT sum(meta_value) from wp_postmeta 
  WHERE meta_key = "points"
  AND post_id in (SELECT object_id from wp_term_relationships 
    WHERE term_taxonomy_id = 6)
  AND post_id in (SELECT post_id from wp_postmeta 
    WHERE meta_key = "cf_Category" and meta_value = "Chapter Building")

内部查询将返回id为6的分类法中的post_id列表。然后将这些post id用作对点字段求和的查询条件。

作为参考,wp_term_relationships表中的object_id字段通常与帖子的ID相同,并且该表中的term_taxonomy_id通常与term_id相同。如果您不知道类别或标记的term_id,可以在编辑该类别时查看页面的URL找到它;它在那里作为一个名为“tag_ID”的参数。

如果您不熟悉在Wordpress中编写自定义SQL查询,the Codex has some details.您将需要使用$ wpdb-> prepare()。

每个OP的最终代码

<?php $meta_key = 'cf_PointValue'; $point_total = $wpdb->get_var( $wpdb->prepare( " SELECT sum(meta_value) from wp_postmeta WHERE meta_key = %s AND post_id in (SELECT object_id from wp_term_relationships WHERE term_taxonomy_id = 17) AND post_id in (SELECT post_id from wp_postmeta WHERE meta_key = 'cf_Category' and meta_value = 'Chapter Building')", $meta_key ) ); echo $point_total; ?>

答案 1 :(得分:1)

<?php
$meta_key = 'cf_PointValue';
$point_total = $wpdb->get_var( $wpdb->prepare( 
    "
    SELECT sum(meta_value) from wp_postmeta 
  WHERE meta_key = %s
  AND post_id in (SELECT object_id from wp_term_relationships 
    WHERE term_taxonomy_id = 17)
  AND post_id in (SELECT post_id from wp_postmeta 
    WHERE meta_key = 'cf_Category' and meta_value = 'Chapter Building')", 
    $meta_key
) );
echo $point_total;
?>