jarvis Posted February 10, 2014 Share Posted February 10, 2014 Hi All, I really hope someone can help. I've a custom post type called 'countries'. Each region can have sub regions. For example; Europe is made up of Uk, France, Germany etc Now, the site is a job site, when you add a job, you can add it to a country/sub country. What I'm trying to do is show a total number of jobs. It works apart from when you have a job in Europe and jobs listed in sub regions, France etc I have 4 jobs listed. 1 in Europe 3 in France It should therefore show 4 but instead, I can't get the totals to combine. I think I'm missing something obvious!! Any help is much appreciated <ul> <?php #List all the countries $countries_query = array( 'post_type' => 'countries', 'post_status' => 'publish', 'order' => 'ASC', 'orderby' => 'name', 'hide_empty' => 1, 'post_parent' => 0 ); $loop = new WP_Query( $countries_query ); while ( $loop->have_posts() ) : $loop->the_post(); $countries_key = 'country'; $countries_value = get_the_ID(); $countries_sql = "SELECT count(DISTINCT pm.post_id) FROM $wpdb->postmeta pm JOIN $wpdb->posts p ON (p.ID = pm.post_id) WHERE pm.meta_key = '$countries_key' AND pm.meta_value = '$countries_value' AND p.post_type = 'jobs' AND p.post_status = 'publish' "; $countries_count = $wpdb->get_var($countries_sql); #echo $countries_count; #debug ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php #If parent country has jobs, then show the total #if ($countries_count != 0) : echo '('.$countries_count.')'; endif; ?> <?php #List all jobs linked to a country via the Country ID $posts = get_posts(array( 'numberposts' => -1, 'post_type' => 'countries', 'post_parent' => get_the_ID() )); if($posts) { $total = 0; foreach($posts as $post) { $meta_key = 'country'; $meta_value = get_the_ID(); $sql = "SELECT count(DISTINCT pm.post_id) FROM $wpdb->postmeta pm JOIN $wpdb->posts p ON (p.ID = pm.post_id) WHERE pm.meta_key = '$meta_key' AND pm.meta_value = '$meta_value' AND p.post_type = 'jobs' AND p.post_status = 'publish' "; $count = $wpdb->get_var($sql); #Combine the totals of all the sub country jobs $thecount = $count[0]; $total += $thecount; } #end foreach $posts $new_total = $countries_count + $total; echo "($new_total)"; } #endif $posts #If parent country has jobs, then show the total if ($countries_count != 0) : echo '('.$countries_count.')'; endif; ?> </li> <?php endwhile; ?> </ul> Thanks in advanced. Link to comment https://forums.phpfreaks.com/topic/286087-combine-totals-from-while-loop-and-foreach-loop-wordpress/ Share on other sites More sharing options...
sKunKbad Posted February 10, 2014 Share Posted February 10, 2014 If it were me, I'd probably use a direct query to the db. Many times the wordpress way is the hard way. It seems that you are using a mixed approach. Perhaps you can change that and send each result to the console. Link to comment https://forums.phpfreaks.com/topic/286087-combine-totals-from-while-loop-and-foreach-loop-wordpress/#findComment-1468395 Share on other sites More sharing options...
jarvis Posted February 10, 2014 Author Share Posted February 10, 2014 Thanks sKunKbad, I did think of that but because I need to loop round twice, thought this would be the better approach. Especially as I need to grab the ID value from the first loop and pass it to the second. Not something I thought could be done by querying the DB direct - unless I've totally missed the obvious!? Link to comment https://forums.phpfreaks.com/topic/286087-combine-totals-from-while-loop-and-foreach-loop-wordpress/#findComment-1468398 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.