我有一个名为“积分”的自定义字段。这是一个数值,所以有些帖子有2个点,有些有10个等等。
我想计算给定类别中所有帖子的“点数”总数,这些帖子的自定义字段“cf_Category”的值为“章节构建”
因此,可以查询类别X中的所有帖子,其元键“cf_Category”的值是“章节构建”,然后将元键“点”的值相加,然后回显该数字。
这有意义吗?我可以将所有帖子的所有积分相加,但是很难将其限制为一个类别。
提前致谢!
答案 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;
?>