Skip to content

Instantly share code, notes, and snippets.

@cliffordp
Last active April 27, 2017 18:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cliffordp/08386a29677d25d8fd6deb0fbfe75bf9 to your computer and use it in GitHub Desktop.
Save cliffordp/08386a29677d25d8fd6deb0fbfe75bf9 to your computer and use it in GitHub Desktop.
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' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment