, Ruben Garcia * @since 2.3.1 */ // Exit if accessed directly if( !defined( 'ABSPATH' ) ) exit; /** * Register [gamipress_inline_user_rank] shortcode * * @since 2.3.1 */ function gamipress_register_inline_user_rank_shortcode() { // Setup the rank fields $rank_fields = GamiPress()->shortcodes['gamipress_inline_rank']->fields; unset( $rank_fields['id'] ); gamipress_register_shortcode( 'gamipress_inline_user_rank', array( 'name' => __( 'Inline User Rank', 'gamipress' ), 'description' => __( 'Display previous, current and/or next rank of a user inline.', 'gamipress' ), 'icon' => 'rank', 'group' => 'gamipress', 'output_callback' => 'gamipress_inline_user_rank_shortcode', 'tabs' => array( 'general' => array( 'icon' => 'dashicons-admin-generic', 'title' => __( 'General', 'gamipress' ), 'fields' => array( 'type', 'prev_rank', 'current_rank', 'next_rank', 'current_user', 'user_id', 'columns', 'columns_small', ), ), 'rank' => array( 'icon' => 'dashicons-awards', 'title' => __( 'Rank', 'gamipress' ), 'fields' => array_keys( $rank_fields ), ), ), 'fields' => array_merge( array( 'type' => array( 'name' => __( 'Rank Type', 'gamipress' ), 'tooltip' => __( 'Rank type to display.', 'gamipress' ), 'label_cb' => 'cmb_tooltip_label_cb', 'type' => 'select', 'option_all' => false, 'option_none' => true, 'options_cb' => 'gamipress_options_cb_rank_types', ), 'prev_rank' => array( 'name' => __( 'Show Previous Rank', 'gamipress' ), 'tooltip' => __( 'Show the previous user rank.', 'gamipress' ), 'label_cb' => 'cmb_tooltip_label_cb', 'type' => 'checkbox', 'classes' => 'gamipress-switch', 'default' => 'yes' ), 'current_rank' => array( 'name' => __( 'Show Current Rank', 'gamipress' ), 'tooltip' => __( 'Show the current user rank.', 'gamipress' ), 'label_cb' => 'cmb_tooltip_label_cb', 'type' => 'checkbox', 'classes' => 'gamipress-switch', 'default' => 'yes' ), 'next_rank' => array( 'name' => __( 'Show Next Rank', 'gamipress' ), 'tooltip' => __( 'Show the next user rank.', 'gamipress' ), 'label_cb' => 'cmb_tooltip_label_cb', 'type' => 'checkbox', 'classes' => 'gamipress-switch', 'default' => 'yes' ), 'current_user' => array( 'name' => __( 'Current User', 'gamipress' ), 'tooltip' => __( 'Show the current logged in user ranks.', 'gamipress' ), 'label_cb' => 'cmb_tooltip_label_cb', 'type' => 'checkbox', 'classes' => 'gamipress-switch', 'default' => 'yes' ), 'user_id' => array( 'name' => __( 'User', 'gamipress' ), 'tooltip' => __( 'Show a specific user ranks.', 'gamipress' ), 'label_cb' => 'cmb_tooltip_label_cb', 'type' => 'select', 'default' => '', 'options_cb' => 'gamipress_options_cb_users' ), ), $rank_fields ), ) ); } add_action( 'init', 'gamipress_register_inline_user_rank_shortcode' ); /** * User Rank Shortcode * * @since 2.3.1 * * @param array $atts Shortcode attributes * @param string $content Shortcode content * * @return string HTML markup */ function gamipress_inline_user_rank_shortcode( $atts = array(), $content = '' ) { global $gamipress_template_args; // Initialize GamiPress template args global $gamipress_template_args = array(); $shortcode = 'gamipress_inline_user_rank'; $atts = shortcode_atts( array_merge( array( // User rank atts 'type' => '', 'prev_rank' => 'yes', 'current_rank' => 'yes', 'next_rank' => 'yes', 'current_user' => 'yes', 'user_id' => '0', ), gamipress_inline_rank_shortcode_defaults() ), $atts, $shortcode ); // --------------------------- // Shortcode Errors // --------------------------- // Not type provided if( $atts['type'] === '' ) { return gamipress_shortcode_error( __( 'Please, provide any rank type.', 'gamipress' ), $shortcode ); } // Wrong rank if( ! in_array( $atts['type'], gamipress_get_rank_types_slugs() ) ) { return gamipress_shortcode_error( __( 'The type provided isn\'t a valid registered rank type.', 'gamipress' ), $shortcode ); } // Nothing to show if( $atts['prev_rank'] === 'no' && $atts['current_rank'] === 'no' && $atts['next_rank'] === 'no' ) { return gamipress_shortcode_error( __( 'None of the options to be displayed have been selected (previous, current or next). Please, select one.', 'gamipress' ), $shortcode ); } // Force to set current user as user ID if( $atts['current_user'] === 'yes' ) { $atts['user_id'] = get_current_user_id(); } // Not user ID provided if( $atts['current_user'] === 'no' && absint( $atts['user_id'] ) === 0 ) { return gamipress_shortcode_error( __( 'Please, provide the user ID.', 'gamipress' ), $shortcode ); } // Guests not supported if( absint( $atts['user_id'] ) === 0 ) { return ''; } // --------------------------- // Shortcode Processing // --------------------------- // Enqueue assets gamipress_enqueue_scripts(); // On network wide active installs, we need to switch to main blog mostly for posts permalinks and thumbnails $blog_id = gamipress_switch_to_main_site_if_network_wide_active(); $user_rank_id = gamipress_get_user_rank_id( $atts['user_id'], $atts['type'] ); $ranks = array(); if( $atts['prev_rank'] === 'yes' ) { $prev_rank_id = gamipress_get_prev_rank_id( $user_rank_id ); if( $prev_rank_id !== $user_rank_id && $prev_rank_id !== 0 ) { $ranks[] = $prev_rank_id; } } if( $atts['current_rank'] === 'yes' ) { $ranks[] = $user_rank_id; } if( $atts['next_rank'] === 'yes' ) { $next_rank_id = gamipress_get_next_rank_id( $user_rank_id ); if( $next_rank_id !== $user_rank_id && $next_rank_id !== 0 ) { $ranks[] = $next_rank_id; } } // GamiPress template args global $gamipress_template_args = $atts; $gamipress_template_args['ranks'] = $ranks; // Try to load user-rank-{type}.php, if not exists then load user-rank.php ob_start(); gamipress_get_template_part( 'inline-ranks', $atts['type'] ); $output = ob_get_clean(); $output = gamipress_parse_inline_output( $output ); // If switched to blog, return back to que current blog if( $blog_id !== get_current_blog_id() && is_multisite() ) { restore_current_blog(); } /** * Filter to override shortcode output * * @since 2.3.1 * * @param string $output Final output * @param array $atts Shortcode attributes * @param string $content Shortcode content */ return apply_filters( 'gamipress_inline_user_rank_shortcode_output', $output, $atts, $content ); }