【问题标题】:Wordpress: Calculate custom field values of all posts within a category?Wordpress:计算一个类别中所有帖子的自定义字段值?
【发布时间】:2013-02-14 15:45:14
【问题描述】:

我有一个自定义帖子类型(产品),其中包括一个自定义数字字段(评级)。在类别(制造商)页面上,我想对这些评级进行平均,从而为制造商提供综合评级。

所以我正在尝试构建一个返回单个值的函数:

  • 检索在归入此类别的自定义帖子中找到的所有非空评级字段的平均值
  • 独立于循环运行(我需要在循环之前显示,有时帖子比循环使用的帖子多)

任何想法如何解决这个问题?

【问题讨论】:

  • 给我们提供期望结果的样本记录:D
  • 自定义帖子类型是产品(产品a,产品b。...),自定义字段是评级(57、58、99,...)。类别(制造商 a,制造商 b,...)。问题是如何在循环外查询和平均评分字段?

标签: mysql wordpress


【解决方案1】:

您创建将应用于制造商页面的自定义模板。在主循环之外,您将使用 WP_Query 创建一个辅助循环。然后,您运行自定义帖子类型并累积它们存在的评级。设置一个计数器来计算平均值。然后在必要时使用wp_reset_query() 重置循环。

我没有测试过下面的代码(显然,我不会去设置所有这些),但它应该给你足够的想法,你可以调整/调试它以获得所需的结果;

在此示例中,我在您的自定义帖子类型 4 中创建了一个虚构的类别 ID,您可以将其更改为您的任何设置;

<?php
$counter = 0;
$cumulative_value = 0;

$avg_query = new WP_Query(array('post_type' => 'product', 'posts_per_page' => '-1', 'cat' => '4' ));

if ( $avg_query->have_posts() ) :  
    while ($avg_query->have_posts()) : $avg_query->the_post(); 

        if ( $rating_value = get_post_meta($post->ID, 'rating', true) ) :

            $cumulative_value += $rating_value;
            $counter++;

        endif;

    endwhile;

endif;

$avg_value = $cumulative_value/$counter;

wp_reset_query(); ?>

【讨论】:

  • 超级棒 - 经过两次小修改后效果非常好: * 出于某种原因,我得到了带有“.=”的非理性数字——我将其更改为步兵 '$cumulative_value = $cumulative_value + $rating_value ;'它工作得很好 * 类别 ID 替换为 $cat - 它特定于个人 ID 我在哪里可以给 100 分? :)
  • 大声笑——太好了。无理数一定是我把一个字符串加到一个数字上,所以它一定是把它连接起来的。应该使用 (int) 明确地将其转换为数字。已更新帖子。
  • 哈哈 - 我找过,但至少结果看起来没有串联,或者它已经达到极限......顺便说一句,我试过了,但它不像你改变它的方式那样工作;括号和 int 也没有定义
  • 天啊!多么大错特错啊。 +=
  • @Pete - echo $avg_value;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 2016-11-17
相关资源
最近更新 更多