I do a lot with weird stats. I do a lot with CMB2 and custom meta. I do a lot with CMB2 and weird post meta.
Is it any surprise I wanted to add my new year dropdown data to my site for some interesting statistics?
Of course not. But I started small. I have a saved loop called $all_shows_query
// List of shows $all_shows_query = new WP_Query ( array( 'post_type' => 'post_type_shows', 'posts_per_page' => -1, 'no_found_rows' => true, 'post_status' => array( 'publish', 'draft' ), ));
This really just gets the list of all the shows and holds on to it. The meat of the code runs with this:
$show_current = 0;
if ($all_shows_query->have_posts() ) {
while ( $all_shows_query->have_posts() ) {
$all_shows_query->the_post();
$show_id = $post->ID;
if ( get_post_meta( $show_id, "shows_airdates", true) ) {
$airdates = get_post_meta( $show_id, "shows_airdates", true);
if ( $airdates['finish'] == 'current' ) {
$show_current++;
}
}
// More IF statements are here.
}
wp_reset_query();
}
As mentioned, there are more if statements, like if ( get_post_meta( $show_id, "shows_stars", true) ) {...} which gets data for if a show has a star or not. And if ( get_post_meta( $show_id, "shows_worthit", true) ) {...} which checks if a show is worth it or not. I was already doing a lot of this, so slipping in one more check doesn’t hurt.
To show the data, without Chart.js, it looks like this:
<h3>Shows Currently Airing</h3> <p>• Currently Airing - <?php echo $show_current .' total — '. round( ( ( $show_current / $count_shows ) * 100) , 1); ?>% <br />• Not Airing - <?php echo ( $count_shows - $show_current ) .' total — '. round( ( ( ( $count_shows - $show_current ) / $count_shows ) * 100) , 1); ?>% </p>
With Chart.js, it looks like this:
<canvas id="pieCurrent" width="200" height="200"></canvas>
<script>
// Piechart for Currently Airing Data
var pieCurrentdata = {
labels: [
"On Air (<?php echo $show_current; ?>)",
"Off Air (<?php echo ($count_shows - $show_current ); ?>)",
],
datasets: [
{
data: [ <?php echo '
"'.$show_current.'",
"'.($count_shows - $show_current ).'",
'; ?>],
backgroundColor: [
"#4BC0C0",
"#FF6384",
"#E7E9ED"
]
}]
};
var ctx = document.getElementById("pieCurrent").getContext("2d");
var pieTriggers = new Chart(ctx,{
type:'doughnut',
data: pieCurrentdata,
options: {
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
return data.labels[tooltipItem.index];
}
},
},
}
});
</script>
Right now the data’s a bit off, since I’ve only updated 200 of the 325 shows, but it’s enough to get the information.

