Операции с настраиваемыми значениями полей в цикле

У меня есть foreach для отображения всего сообщения в одном таксономическом фильтре по срокам.
У меня есть настраиваемое поле для отображения числового значения.
То, что мне нужно, – сделать две математические операции со всеми значениями этого поля на всех постах в этом термина.

Я имею в виду:

Таксономия X имеет 4 условия.
Каждый термин имеет 4 должности.
Каждое сообщение имеет 1 custom_field.
Мне нужно сделать сумму всего значения custom_field в этом члене и среднее значение этого настраиваемого поля.

Итак, на данный момент у меня есть:

<?php foreach ( $prod_terms as $prod_term ) { $prod_query = new WP_Query( array( 'post_type' => 'prod_cientifica', 'prod_area' => $post_slug, 'tax_query' => array( array( 'taxonomy' => 'prod_tipo', 'terms' => array( $prod_term->slug ), 'operator' => 'IN', 'get' => 'all', 'field' => 'slug' ) ) ) ); if ( $prod_query->have_posts() ) : while ( $prod_query->have_posts() ) : $prod_query->the_post(); ?> <div class="areaItem"> <h4><?php the_title(); ?></h4> <p class="autores"><?php the_field('prod_autores'); ?></p> <p class="info"><?php the_field('prod_info'); ?></p> <p class="info"><?php the_field('prod_fi'); ?></p> </div> <?php endwhile; endif; ?> 

То, что мне нужно, – это сделать сумму всего поля prod_fi в каждом члене. Кроме того, среднее значение этого поля тоже.

Есть идеи?

Благодаря!

– Редактировать с помощью кода.

Я попробовал несколько вариантов. Чем ближе это было:

 <?php if ( $prod_query->have_posts() ) : while ( $prod_query->have_posts() ) : $prod_query->the_post(); $total_fi = array(); $meta_key = 'prod_fi';//set this to your custom field meta key $total_fi = $wpdb->get_col($wpdb->prepare ("SELECT meta_value FROM wp_postmeta as pm INNER JOIN wp_term_relationships as tr ON (pm.post_id = tr.object_id) INNER JOIN wp_term_taxonomy as tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE 1 AND tt.taxonomy = 'prod_tipo' AND pm.meta_key = %s", $meta_key)); echo 'Total FI '.array_sum( $total_fi ); ?> 

Но, это показывает мне общее количество всех custom_field в таксономии.

этот, не останавливается на сумме в каждом члене, он продолжается.

 $factorI = get_field('prod_fi'); if($factorI) {$factor_total += $factorI;} echo $factor_total; 

Спасибо.


Я нашел это грязное решение. Я знаю, что это не так, пожалуйста, если кто-то знает правильный способ сделать это, я буду счастлив !!!!

 <?php //start the foreach for each term in taxonomy foreach ( $prod_terms as $prod_term ) { $prod_query = new WP_Query( array( 'post_type' => 'prod_cientifica', 'prod_area' => $post_slug, 'tax_query' => array( array( 'taxonomy' => 'prod_tipo', 'terms' => array( $prod_term->slug ), 'operator' => 'IN', 'get' => 'all', 'field' => 'slug' ) ) ) ); ?> <div class="area"> <h2><?php echo $prod_term->name; ?></h2> <?php // First while for fetch the value of "prod_fi" and make the math. while ( $prod_query->have_posts() ) : $prod_query->the_post(); $factorI = get_field('prod_fi'); if($factorI) {$factor_total += $factorI;} // count post for average math operation $count_posts = $prod_query->current_post + 1; $factorP = $factor_total / $count_posts; endwhile; ?> <p class="areasPublicados"><?php _e('Publicados: ', 'twentytwelve'); ?> <?php echo $count_posts; ?></p> <p class="areasFI fleft"><?php _e('FI medio: ', 'twentytwelve'); ?> <?php echo $factorP; ?> </p><p class="areasFI fright"><?php _e('FI: ', 'twentytwelve'); ?> <?php echo $factor_total; ?></p> <?php //original query to fetch the post in the term if ( $prod_query->have_posts() ) : while ( $prod_query->have_posts() ) : $prod_query->the_post(); ?> <div class="areaItem"> <h4><?php the_title(); ?></h4> <p class="autores"><?php the_field('prod_autores'); ?></p> <p class="info"><?php the_field('prod_info'); ?></p> </div> <?php endwhile; endif; ?> </div> <?php // Reset math operation of factor_total, so it don't continue sum $factor_total = null; $prod_query = null; wp_reset_postdata(); } //endforeach ?> 

Отредактировано снова!

 <?php // Fetch all post in taxonomy divided by terms. foreach ( $prod_terms as $prod_term ) { $prod_query = new WP_Query( array( 'post_type' => 'prod_cientifica', 'prod_area' => $post_slug, 'tax_query' => array( array( 'taxonomy' => 'prod_tipo', 'terms' => array( $prod_term->slug ), 'operator' => 'IN', 'get' => 'all', 'field' => 'slug' ) ) ) ); ?> <?php if($prod_query->have_posts()) : ?> <div class="area"> <h2><?php echo $prod_term->name; ?></h2> <?php // Declare total and count before loop $factorTotal = 0; $factorCount = 0; // First loop to fetch prod_fi value while ( $prod_query->have_posts() ) : $prod_query->the_post(); $factorI = get_field('prod_fi'); if($factorI) { // Only if it exists $factorTotal += $factorI; // Add it $factorCount++; // Count it } endwhile; ?> <p class="areasPublicados"> <?php _e('Publicados: ', 'twentytwelve'); ?> <?php echo $factorCount; ?> </p> <p class="areasFI fleft"> <?php _e('FI medio: ', 'twentytwelve'); ?> <?php echo $factorTotal; ?> </p> <p class="areasFI fright"> <?php _e('FI: ', 'twentytwelve'); ?> <?php echo ($factorTotal / $factorCount); ?> </p> <?php if ( $prod_query->have_posts() ) : while ( $prod_query->have_posts() ) : $prod_query->the_post(); ?> <div class="areaItem"> <h4><?php the_title(); ?></h4> <p class="autores"><?php the_field('prod_autores'); ?></p> <p class="info"><?php the_field('prod_info'); ?></p> </div> <?php endwhile; endif; ?> </div> <?php endif; ?> <?php // Reset things, for good measure $factor_total = null; $prod_query = null; wp_reset_postdata(); } //enforeach ?> 

Вот простой способ сделать это:

 // First declare total and count before the loop $total = 0; $count = 0; foreach($posts as $post) { if(get_field('prod_fi')){ // If we have a value add it to the total and count it $total += get_field('prod_fi'); $count++; } } echo 'Count: '. $count; echo 'Total Sum: '. $total; echo 'Average: '.($total / $count); // To get the average 

РЕДАКТИРОВАТЬ:

В вашем случае, когда у вас есть цикл $ prod_query, надейтесь, что это имеет смысл 🙂

 // Declare total and count before loop $factorTotal = 0; $factorCount = 0; while ( $prod_query->have_posts() ) : $prod_query->the_post(); $factorI = get_field('prod_fi'); if($factorI){ // Only if it exists $factorTotal += $factorI; // Add it $factorCount++; // Count it } // end if endwhile; echo 'Count: '. $factorCount; echo 'Total Sum: '. $factorTotal; echo 'Average: '.($factorTotal / $factorCount);