cliffordp
4/27/2017 - 5:04 PM

Shortcode to display count of authored Events, Organizers, and/or Venues per user. Defaults to displaying the currently logged-in user's pub

Shortcode to display count of authored Events, Organizers, and/or Venues per user. Defaults to displaying the currently logged-in user's public_only Events. https://cl.ly/1H3q0w140B10

<?php
/*
 * Shortcode to display count of authored Events, Organizers, and/or Venues per user
 * Defaults to displaying the currently logged-in user's public_only Events.
 * Can be configured to specify a specific user ID.
 * Valid values for the boolean arguments are either "true" for TRUE or anything else, like "" or "false", for FALSE
 * Examples: https://cl.ly/1H3q0w140B10
 *   [tribe_count_author_posts]
 *   [tribe_count_author_posts user_id=6]
 *   [tribe_count_author_posts events=true organizers=true venues=true public_only=false]
 *
 * From https://gist.github.com/cliffordp/08386a29677d25d8fd6deb0fbfe75bf9
 * For https://theeventscalendar.com/support/forums/topic/i-want-total-of-user-events-count-number/
 */
function tribe_count_author_posts_logic( $atts ) {
    // bail if The Events Calendar is not active
	if ( ! class_exists( 'Tribe__Events__Main' ) ) {
	    return false;
	}

	$defaults = array(
		'user_id'       => get_current_user_id(),
		'events'        => 'true',
		'organizers'    => '',
		'venues'        => '',
		'public_only'   => 'true',
	);

	$atts = shortcode_atts( $defaults, $atts, 'tribe_count_author_posts' );

	$user_id = intval( $atts[ 'user_id' ] );

	// https://developer.wordpress.org/reference/functions/get_userdata/
    $user_data = get_userdata( $user_id );

    // bail if user ID does not exist
    if ( empty( $user_data ) ) {
        return false;
    }

    $events = strtolower( trim( $atts[ 'events' ] ) );
    if ( 'true' !== $events ) {
        $events = false;
    } else {
        $events = true;
    }

    $organizers = strtolower( trim( $atts[ 'organizers' ] ) );
    if ( 'true' !== $organizers ) {
        $organizers = false;
    } else {
        $organizers = true;
    }

    $venues = strtolower( trim( $atts[ 'venues' ] ) );
    if ( 'true' !== $venues ) {
        $venues = false;
    } else {
        $venues = true;
    }

    // bail if no posts types are selected
    if ( empty( $events ) && empty( $organizers ) && empty( $venues ) ) {
        return false;
    }

    $public_only = strtolower( trim( $atts[ 'public_only' ] ) );
    if ( 'true' !== $public_only ) {
        $public_only = false;
    } else {
        $public_only = true;
    }

    // start the count
    $count = 0; // cumulative
    $c = 0; // temporary

    $labels = '';

    if ( $events ) {
        // do count
        $c = count_user_posts( $user_id, Tribe__Events__Main::POSTTYPE, $public_only );
        $count = $count + $c;
        $c = 0;

        // do label
        $label = Tribe__Events__Main::instance()->get_event_label_plural();

        if ( empty( $labels ) ) {
	        $labels = $label;
        } else {
            $labels .= sprintf( ', %s', $label );
        }
    }

    if ( $organizers ) {
	    // do count
        $c = count_user_posts( $user_id, Tribe__Events__Main::ORGANIZER_POST_TYPE, $public_only );
        $count = $count + $c;
        $c = 0;

	    // do label
	    $label = Tribe__Events__Main::instance()->get_organizer_label_plural();

	    if ( empty( $labels ) ) {
		    $labels = $label;
	    } else {
		    $labels .= sprintf( ', %s', $label );
	    }
    }

    if ( $venues ) {
	    // do count
        $c = count_user_posts( $user_id, Tribe__Events__Main::VENUE_POST_TYPE, $public_only );
        $count = $count + $c;
        $c = 0;

	    // do label
	    $label = Tribe__Events__Main::instance()->get_venue_label_plural();

	    if ( empty( $labels ) ) {
		    $labels = $label;
	    } else {
		    $labels .= sprintf( ', %s', $label );
	    }
    }

    // begin output
	$output = sprintf( '<div id="tribe_count_author_posts_%d" class="tribe_count_author_posts">', $user_id );

    $output .= sprintf( '%d %s', $count, $labels );

    $output .= '</div>';

	return $output;
}

add_shortcode( 'tribe_count_author_posts', 'tribe_count_author_posts_logic' );