test pages
// functions.php に追加
add_action('wp_enqueue_scripts', function() {
// パスは必要に応じて調整(子テーマ使うなら get_stylesheet_directory_uri())
wp_enqueue_style('my-accordion-style', get_template_directory_uri() . '/accordion.css', [], '1.0');
wp_enqueue_script('my-accordion-script', get_template_directory_uri() . '/accordion.js', ['jquery'], '1.0', true);
});
global $my_wp_accordion_count;
$my_wp_accordion_count = 0;
// [accordion multiple="true|false"]...[/accordion]
add_shortcode('accordion', function($atts, $content = null) {
global $my_wp_accordion_count;
$my_wp_accordion_count++;
$atts = shortcode_atts([
'multiple' => 'false', // trueにすると複数開ける
'class' => ''
], $atts, 'accordion');
$id = 'wp-accordion-' . $my_wp_accordion_count;
$multiple = ($atts['multiple'] === 'true') ? 'true' : 'false';
$class = esc_attr($atts['class']);
$out = '<div id="'. esc_attr($id) .'" class="wp-accordion '. $class .'" data-accordion-multiple="'. $multiple .'">';
$out .= do_shortcode($content);
$out .= '</div>';
return $out;
});
// [accordion_item title="nontitle"]本文[/accordion_item]
add_shortcode('accordion_item', function($atts, $content = null) {
static $item_index = 0;
$item_index++;
$atts = shortcode_atts([
'title' => 'タイトル',
'open' => 'false' // default closed
], $atts, 'accordion_item');
$title = esc_html($atts['title']);
$open = ($atts['open'] === 'true') ? true : false;
$btn_id = 'wp-accordion-btn-' . $item_index;
$panel_id = 'wp-accordion-panel-' . $item_index;
$btn_aria_expanded = $open ? 'true' : 'false';
$panel_style = $open ? 'style="max-height:1000px;"' : '';
$out = '<div class="wp-accordion-item">';
$out .= '<button id="'. $btn_id .'" class="wp-accordion-trigger" aria-expanded="'. $btn_aria_expanded .'" aria-controls="'. $panel_id .'">';
$out .= '<span class="wp-accordion-title">'. $title .'</span>';
$out .= '<span class="wp-accordion-icon" aria-hidden="true">+</span>';
$out .= '</button>';
$out .= '<div id="'. $panel_id .'" class="wp-accordion-panel" role="region" aria-labelledby="'. $btn_id .'" '. $panel_style .'>';
$out .= do_shortcode($content);
$out .= '</div>';
$out .= '</div>';
return $out;
});