
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
<?php

/* ======= Automatic Shortcode Registration ( 'autoregister' => true ) ======= */

/**
 * Accordion Wrap Shortcode
 *
 * @param array  $output    Shortcode HTML.
 * @param array  $atts      User defined attributes in shortcode tag.
 * @param string $content   Shorcode tag content.
 * @return string           Shortcode result HTML.
 */
function bsc_accordion_shortcode( $output, $atts, $content ) {
	$output = '<div id="accordion" class="bsc-accordion" role="tablist" aria-multiselectable="true">' . $content . '</div>';

	return $output;
}
add_filter( 'bsc_accordion_shortcode', 'bsc_accordion_shortcode', 10, 3 );


/**
 * Accordion Item Shortcode
 *
 * @param array  $output    Shortcode HTML.
 * @param array  $atts      User defined attributes in shortcode tag.
 * @param string $content   Shorcode tag content.
 * @return string           Shortcode result HTML.
 */
function bsc_accordion_item_shortcode( $output, $atts, $content ) {

	$item_id = uniqid();
	$output  = sprintf(
		'<div class="card">
			<div class="card-header" role="tab" id="card-%1$s">
				<h5 class="mb-0">
					<a data-toggle="collapse" data-parent="#accordion" href="#collapse-%1$s" aria-expanded="true" aria-controls="collapse-%1$s">
						%2$s
					</a>
				</h5>
			</div>

			<div id="collapse-%1$s" class="collapse%3$s" role="tabpanel" aria-labelledby="card-%1$s">
				<div class="card-block">
					%4$s
				</div>
			</div>
		</div>
		',
		$item_id,
		$atts['title'],
		( 'true' === $atts['opened'] ) ? ' show' : '',
		do_shortcode( $content )
	);

	return $output;
}
add_filter( 'bsc_accordion_item_shortcode', 'bsc_accordion_item_shortcode', 10, 3 );


/* ======= Manual Shortcode Registration ( 'autoregister' => false ) ======= */

/**
 * Accordion Wrap Shortcode
 *
 * @param array  $atts      User defined attributes in shortcode tag.
 * @param string $content   Shorcode tag content.
 * @return string           Shortcode result HTML.
 */
function bsc_accordion_test( $atts, $content = '' ) {
	$atts   = shortcode_atts( array(), $atts );
	$output = '<div id="accordion" class="bsc-accordion" role="tablist" aria-multiselectable="true">' . do_shortcode( $content ) . '</div>';

	return $output;
}
add_shortcode( 'bsc_accordion', 'bsc_accordion_test' );

/**
 * Accordion Item Shortcode
 *
 * @param array  $atts    User defined attributes in shortcode tag.
 * @param string $content Shorcode tag content.
 * @return string         Shortcode result HTML.
 */
function bsc_accordion_item_test( $atts, $content = '' ) {
	$atts = shortcode_atts( array(
		'title'		=> '',
		'opened'	=> 'false',
	), $atts );

	$item_id = uniqid();
	$output  = sprintf(
		'<div class="card">
			<div class="card-header" role="tab" id="card-%1$s">
				<h5 class="mb-0">
					<a data-toggle="collapse" data-parent="#accordion" href="#collapse-%1$s" aria-expanded="true" aria-controls="collapse-%1$s">
						%2$s
					</a>
				</h5>
			</div>

			<div id="collapse-%1$s" class="collapse%3$s" role="tabpanel" aria-labelledby="card-%1$s">
				<div class="card-block">
					%4$s
				</div>
			</div>
		</div>
		',
		$item_id,
		$atts['title'],
		( 'true' === $atts['opened'] ) ? ' show' : '',
		do_shortcode( $content )
	);

	return $output;
}
add_shortcode( 'bsc_accordion_item', 'bsc_accordion_item_test' );
