Browse: Home / Snippets /

Format [courseinfo] certificate shortcode cumulative_percentage parameter decimal places

Contents


Snippet #

Important: All snippets are provided as-is without support or guarantees. These snippets are provided as guidelines for advanced users looking to customize LearnDash. For any additional help or support with these snippets, we recommend reaching out to a LearnDash Expert.

/**
 * This is an example of wrapping a shortcode around the LearnDash [courseinfo] shortcode to control the format. 
 *
 * In the following example we are targeting the courseinto item 'cumulative_percentage'. By default the
 * value returned via LearnDash will be a number with 2 decimal places. We want to round the number value 
 * to the closest whole integer. 
 *
 * For this we wrap the LearnDash shortcode with our own [number_format][/number_format] as in
 * [number_format show="cumulative_percentage" decimal_places="1"][courseinfo show="cumulative_percentage"][/number_format]
 * We use the same show="" parameter this was we only have one shortcode function instead of one for each of the courseinfo items. 
 * Also, we have a second optional parameter decimal_places="" this is used to control the number of decimal places to trim to. 
 * If not provided the default is decimal_places="2".
 *
 */

add_shortcode('number_format', function ( $atts = array(), $content = '') {
	// We call do_shortcode because what is passed here in $content
	// is the inner shortcode '[courseinfo show="cumulative_percentage"]'
	// We need to get the returned numer value first.
	$content = do_shortcode( $content );
	
	if ( ( isset( $atts['show'] ) ) && ( !empty( $atts['show'] ) ) ) {
		if ( !isset( $atts['decimal_places'] ) ) {
			$atts['decimal_places'] = 2;
		}
		$atts['decimal_places'] = intval( $atts['decimal_places'] );
		
		switch( $atts['show'] ) {
			case 'cumulative_percentage':
				//$content = number_format( $content, $atts['decimal_places'] );
				
				// Instead of trimming the decimal places using number_format() we instead want to round the value up/down
				$content = round( $content, $atts['decimal_places'] );
				break;
			
			default:
				break;
		}
	}
	
	return $content;
}, 10, 2);