Имеется публикация, скажем, с 60 спойлерами. Как можно реализовать возможность раскрыть и закрыть разом все спойлеры для пользователей? Может есть плагин какой-нибудь? Или кнопку какую сделать?
<?php function bbspoiler_shortcode($atts, $content) {
extract(shortcode_atts(array(
'title' => __('Spoiler', 'bbspoiler'),
'state' => 'folded',
'style' => 'default',
'collapse_link' => 'true'
), $atts));
$title = esc_attr($title);
$head_class = (esc_attr($state) == 'folded')?'':' unfolded';
$body_class = (esc_attr($state) == 'folded')?' folded':'';
$output = "\n<div class=\"sp-wrap sp-wrap-".$style."\">\n";
$output .= "<div class=\"sp-head".$head_class."\" title=\"". __('Expand', 'bbspoiler') ."\">\n";
$output .= $title;
$output .= "\n</div>\n";
$output .= "<div class=\"sp-body".$body_class."\">\n";
$output .= wpautop(do_shortcode($content));
if ($collapse_link == 'true') {
$output .= "<div class=\"spdiv\">[". __('collapse', 'bbspoiler') . "]</div>\n";
}
$output .= "</div>\n</div>\n";
return $output;
}
add_shortcode ('spoiler', 'bbspoiler_shortcode');
function bbspoiler_shortcode2($atts, $content) {
extract(shortcode_atts(array(
'title' => __('Spoiler', 'bbspoiler'),
'state' => 'folded',
'style' => 'default',
'collapse_link' => 'true'
), $atts));
$title = esc_attr($title);
$head_class = (esc_attr($state) == 'folded')?'':' unfolded';
$body_class = (esc_attr($state) == 'folded')?' folded':'';
$output = "\n<div class=\"sp-wrap sp-wrap-".$style."\">\n";
$output .= "<div class=\"sp-head".$head_class."\" title=\"". __('Expand', 'bbspoiler') ."\">\n";
$output .= $title;
$output .= "\n</div>\n";
$output .= "<div class=\"sp-body".$body_class."\">\n";
$output .= wpautop(do_shortcode($content));
if ($collapse_link == 'true') {
$output .= "<div class=\"spdiv\">[". __('collapse', 'bbspoiler') . "]</div>\n";
}
$output .= "</div>\n</div>\n";
return $output;
}
add_shortcode ('spoiler2', 'bbspoiler_shortcode2');
function bbspoiler_files() {
$purl = plugins_url();
wp_register_script('bbspoiler', $purl . '/bbspoiler/inc/bbspoiler.js');
wp_register_style( 'bbspoiler', $purl . '/bbspoiler/inc/bbspoiler.css' );
if(!wp_script_is('jquery')) {wp_enqueue_script('jquery');}
wp_enqueue_script('bbspoiler');
wp_enqueue_style('bbspoiler');
$lang_array = array('unfolded' => __('Expand', 'bbspoiler'),
'folded' => __('Collapse', 'bbspoiler'));
wp_localize_script('bbspoiler', 'title', $lang_array);
}
add_action('wp_enqueue_scripts', 'bbspoiler_files');
function bbspoiler_admin_print_scripts() {
?>
<script type='text/javascript'>
var bbbutton = {
"title":"<?php _e('Title', 'bbspoiler'); ?>",
"spoiler":"<?php _e('Spoiler', 'bbspoiler'); ?>",
"text":"<?php _e('Text', 'bbspoiler'); ?>",
"showlink":"<?php _e('Show collapse link?', 'bbspoiler'); ?>",
"style":"<?php _e('Style', 'bbspoiler'); ?>",
"default2":"<?php _e('Default', 'bbspoiler'); ?>",
"green":"<?php _e('Green', 'bbspoiler'); ?>",
"red":"<?php _e('Red', 'bbspoiler'); ?>",
"blue":"<?php _e('Blue', 'bbspoiler'); ?>",
"yellow":"<?php _e('Yellow', 'bbspoiler'); ?>",
"orange":"<?php _e('Orange', 'bbspoiler'); ?>",
"brown":"<?php _e('Brown', 'bbspoiler'); ?>",
"purple":"<?php _e('Purple', 'bbspoiler'); ?>",
"cyan":"<?php _e('Cyan', 'bbspoiler'); ?>",
"lime":"<?php _e('Lime', 'bbspoiler'); ?>",
"steelblue":"<?php _e('SteelBlue', 'bbspoiler'); ?>",
};
</script>
<?php }
add_action('admin_head', 'bbspoiler_admin_print_scripts');
function bbspoiler_setup(){
load_plugin_textdomain('bbspoiler');
}
add_action('init', 'bbspoiler_setup');
add_action('admin_print_footer_scripts','eg_quicktags');
function eg_quicktags(){
if (wp_script_is('quicktags')){ ?>
<script type="text/javascript" charset="utf-8">
buttonSpoiler = edButtons.length;
edButtons[edButtons.length] = new edButton('spoiler','spoiler','[spoiler title=\'Title\']Text[/spoiler]\n');
jQuery(document).ready(function($){
jQuery("#ed_toolbar").append('<input type="button" value="spoiler" id="ed_spoiler" class="ed_button" onclick="edInsertTag(edCanvas, buttonSpoiler);" title="Spoiler" />');
});
</script>
<?php } }
function bbspoiler_add_tinymce() {
global $typenow;
if(!in_array($typenow, array('post', 'page')))
return ;
add_filter('mce_external_plugins', 'bbspoiler_add_tinymce_plugin');
add_filter('mce_buttons', 'bbspoiler_add_tinymce_button');
}
add_action('admin_head', 'bbspoiler_add_tinymce');
function bbspoiler_add_tinymce_plugin($plugin_array) {
$plugin_array['bbspoiler_button'] = plugins_url('/inc/bbbutton.js', __FILE__);
return $plugin_array;
}
// Add the button key for address via JS
function bbspoiler_add_tinymce_button($buttons) {
array_push($buttons, 'bbspoiler_button_button_key');
return $buttons;
}
add_filter('bbp_get_reply_content', 'bb_enable_shortcode', 10,2);
add_filter('bbp_get_topic_content', 'bb_enable_shortcode', 10,2);
function bb_enable_shortcode($content) {
return do_shortcode($content);
}
?>
( function() {
tinymce.PluginManager.add( 'bbspoiler_button', function( editor, url ) {
// Add a button that opens a window
editor.addButton( 'bbspoiler_button_button_key', {
title : bbbutton.spoiler,
text: false,
image : url + '/spoiler.png',
onclick: function() {
// Open window
editor.windowManager.open( {
title: 'BBSpoiler',
body: [
{type: 'textbox', name: 'title', label: bbbutton.title},
{type: 'textbox', name: 'text', label: bbbutton.text, 'multiline': 'true', 'minWidth': 380, 'minHeight': 140},
{type: 'listbox', name: 'style', label: bbbutton.style,
'values': [
{text: bbbutton.default2, value: 'default'},
{text: bbbutton.green, value: 'green'},
{text: bbbutton.blue, value: 'blue'},
{text: bbbutton.yellow, value: 'yellow'},
{text: bbbutton.orange, value: 'orange'},
{text: bbbutton.brown, value: 'brown'},
{text: bbbutton.purple, value: 'purple'},
{text: bbbutton.cyan, value: 'cyan'},
{text: bbbutton.lime, value: 'lime'},
{text: bbbutton.steelblue, value: 'steelblue'}
]
},
{name: 'collapse_link', type: 'checkbox', checked: 'true', label: bbbutton.showlink}
],
onsubmit: function( e ) {
// Insert content when the window form is submitted
editor.insertContent('[spoiler title=\'' + e.data.title + '\'' + ' style=\'' + e.data.style + '\'' + ' collapse_link=\'' + e.data.collapse_link + '\']' + e.data.text + '[/spoiler]');
}
} );
}
} );
} );
} )();
jQuery(function(){
jQuery(".sp-body.folded").hide();
jQuery(".sp-head").on('click', function(event){
$this = jQuery(this);
if($this.hasClass("unfolded")) {
$this.removeClass("unfolded");
$this.next().slideUp("fast");
$this.next().addClass("folded");
$this.prop('title', title.unfolded);
} else {
$this.addClass("unfolded");
$this.next().slideDown("fast");
$this.next().removeClass("folded");
$this.prop('title', title.folded);
}
});
jQuery(".spdiv").on('click', function(event){
$this = jQuery(this).closest("div.sp-body").prev();
if($this.hasClass("unfolded")) {
$this.removeClass("unfolded");
$this.next().slideUp("fast");
$this.next().addClass("folded");
$this.prop('title', title.unfolded);
}
});
});