Support » Fixing WordPress » Add All values of Custom Field

  • Resolved tiredofit

    (@tiredofit)


    I used custom fields to log the amount of distance I travel per day via a bicycle. I was wondering if there was a way that I could display the total amount of distance that I had travelled by addiing all the values in each of the posts on my home page in PHP.

Viewing 8 replies - 1 through 8 (of 8 total)
  • MichaelH

    (@michaelh)

    Sum miles from all posts with Custom Field my_miles

    <?php
    $total_miles=0;
    $meta_key = 'my_miles';//set this to your custom field meta key
    $allmiles=$wpdb->get_col($wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key));
    foreach ($allmiles as $miles) {
    $total_miles = $total_miles + $miles;
    }
    echo 'Total miles is '.$total_miles;
    ?>

    array_sum is your friend.. 😉

    <?php
    $miles = array();
    $meta_key = 'abc';//set this to your custom field meta key
    $miles = $wpdb->get_col($wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key));
    echo 'Total miles is '.array_sum( $miles );
    ?>

    You can actually drop this though, making it smaller still.

    $miles = array();

    get_col returns an empty array if on fail, or arrayed results on success.. meaning the array_sum will just return 0 on being an empty array.

    tiredofit

    (@tiredofit)

    Awesome! Thanks for the responses!

    MichaelH

    (@michaelh)

    Learned that sum with get_var also works:

    <?php
    $meta_key = 'miles';//set this to your custom field meta key
    $allmiles=$wpdb->get_var($wpdb->prepare("SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key));
    echo '<p>Total miles is '.$allmiles . '</p>';
    ?>

    Yes, that’s certainly an alternateive, however….. if you sum in the query, and it fails you’ll get an error from the echo (i think), where as the array_sum won’t error because the result will still be an array.. it’ll just be 0 …

    Just avoids any need to catch the error … 🙂

    MichaelH

    (@michaelh)

    So would adding $allmiles = 0; before the query work? Or are you saying that a failed query would put some error message (or value) in $allmiles?

    Just interested…thanks.

    Not sure, i havn’t tested, but echo expects a string, when you echo the result of the query you’ll receive whatever is output on fail (if it fails).

    get_col outputs an empty array on fail, array_sum will not error as long as it’s given a valid array, an empty array will simply return 0 for array_sum (no error).

    Checking the docs suggests get_var returns NULL on fail.
    http://codex.wordpress.org/Function_Reference/wpdb_Class#SELECT_a_Variable

    So it should be fine i guess.. 😉

    Is there a way to do this for only those posts with a specific tag?

Viewing 8 replies - 1 through 8 (of 8 total)
  • The topic ‘Add All values of Custom Field’ is closed to new replies.