How do I create a dynamically-updated copyright statement?

I’d like to find an optimized, WP_Query-safe method for generating a dynamically-populated copyright statement for the bottom of my themes. That is to say, I’d like to check the date (by year) of my oldest and newest posts and then output something along the lines of

[blog name] © [oldest post year]-[newest post year] [primary blog author]

What’s the easiest/safest way to do so?

Related posts

Leave a Reply

2 comments

  1. Here’s what I use:

    function oenology_copyright() {
        global $wpdb;
        $copyright_dates = $wpdb->get_results("
            SELECT
                YEAR(min(post_date_gmt)) AS firstdate,
                YEAR(max(post_date_gmt)) AS lastdate
            FROM
                $wpdb->posts
            WHERE
                post_status = 'publish'
        ");
        $output = '';
        if($copyright_dates) {
            $copyright = "© " . $copyright_dates[0]->firstdate;
                if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
                    $copyright .= '-' . $copyright_dates[0]->lastdate;
                }
            $output = $copyright;
        }
        return $output;
    }
    

    Of course, if there’s a cleaner, safer, or more efficient method, I’d love to hear about it, too!

    EDIT:

    And here’s a more cleaned-up version, that adds the copyright dates to wp_cache:

    function oenology_copyright() {
        // check for cached values for copyright dates
        $copyright_cache = wp_cache_get( 'copyright_dates', 'oenology' );
        // query the database for first/last copyright dates, if no cache exists
        if ( false === $copyright_cache ) { 
            global $wpdb;
            $copyright_dates = $wpdb->get_results("
                SELECT
                YEAR(min(post_date_gmt)) AS firstdate,
                YEAR(max(post_date_gmt)) AS lastdate
                FROM
                $wpdb->posts
                WHERE
                post_status = 'publish'
            ");
            $copyright_cache = $copyright_dates;
            // add the first/last copyright dates to the cache
            wp_cache_set( 'copyright_dates', $copyright_cache, 'oenology', '604800' );
        }
        // Build the copyright notice, based on cached date values
        $output = '© ';
        if( $copyright_cache ) {
            $copyright = $copyright_cache[0]->firstdate;
            if( $copyright_cache[0]->firstdate != $copyright_cache[0]->lastdate ) {
                $copyright .= '-' . $copyright_cache[0]->lastdate;
            }
            $output .= $copyright;
        } else {
            $output .= date( 'Y' );
        }
        return $output;
    }
    

    Would this improve performance a bit?

  2. /* Dynamic Copyright Date Start */  
    function royaltechbd_copyright() {
    global $wpdb;
    $copyright_dates = $wpdb->get_results("
    SELECT
    YEAR(min(post_date_gmt)) AS firstdate,
    YEAR(max(post_date_gmt)) AS lastdate
    FROM
    $wpdb->posts
    WHERE
    post_status = 'publish'
    ");
    $output = '';
    if($copyright_dates) {
    $copyright = "© " . $copyright_dates[0]->firstdate;
    if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
    $copyright .= '-' . $copyright_dates[0]->lastdate;
    }
    $output = $copyright;
    }
    return $output;
    }
    /* Dynamic Copyright Date End */