Intereting Posts
Каков наилучший способ создать экземпляр класса плагина в вашей теме WordPress? Как сделать фильтр If Else on Excerpt Добавить окно выбора ко всем виджетам Разбиение страницы с нестандартным типом сообщения Лучший способ добавить UnEdable HTML в сообщения Являются ли term_taxonomy_id и term_id одинаковыми? Как ограничить символы заголовка сообщения? Преобразование меню WP в раскрывающийся список для мобильного браузера Что делает загрузчик мультимедиа WordPress для загрузки файлов изображений? Управление фрагментами рекламного кода Как добавить дополнительное поле во всех доступных WordPress виджетах? Как отключить все учетные записи на клиентской стороне без отключения новых учетных записей пользователей? Как отображать дочерние категории всех родительских категорий в одном цикле? Почему WP_Query не ищет 2 'meta_query' ключи, разделенные символом ИЛИ? проблема с esc_attr (ob_get_clean ())

Инициализировать add_action () для каждой копии определенного короткого кода

У меня есть короткий код, который генерирует слайдер. Все работает отлично, пока я не попытаюсь добавить еще один «партнерский» слайдер с различными вариантами. Я не могу задать конкретные настройки для каждого слайдера, потому что функция print_partners_scripts () генерируется только один раз. Мне нужно инициализировать функцию print_partners_scripts () для каждого слайдера, указанного в параметрах короткого кода. Надеюсь, вы понимаете, что я имею в виду;)

function print_partners_scripts() { global $extra_options, $pslider; echo '<script type="text/javascript">' . "\n"; echo 'jQuery(document).ready( function() {'. "\n"; echo ' $(".'.$pslider.'").bxSlider({ slideWidth: 924, auto: 1, autoStart: 1, moveSlides: 1, minSlides: 7, maxSlides: 8, pager: false, controls: false, slideMargin: 5, autoHover: true ' . $extra_options . ' });' . "\n"; echo '});' . "\n"; echo '</script>' . "\n"; } function partners($atts ) { global $extra_options, $pslider; extract(shortcode_atts(array( 'ids' => null, 'extra_options' => null ), $atts)); add_action( 'wp_footer', 'print_partners_scripts' ); $pslider = 'partners-slider'.rand(100,999); $ids = explode( ',', $ids ); $output = '<div class="section row-one"><div class="col ps-gradient"><div class="ps-wrap"><div class="'.$pslider.'">'; foreach($ids as $id) { $img_attr = wp_get_attachment_image_src( $id, 'full' ); $alt_text = get_post_meta( $id, '_wp_attachment_image_alt', true); $output .= '<div class="pslide"><a href="' . $alt_text . '"><img src="' . $img_attr[0] . '" /></a></div>'; } $output .= '</div></div></div></div>'; return $output; } add_shortcode('partners', 'partners'); 

Вы можете передать значения, добавив свой собственный фильтр. Доказательство концепции:

 add_filter( 'my_filter', function() { return array(1,2,3); } ); function print_partners_scripts() { $args = apply_filters('my_filter',null); var_dump($args); } add_action( 'wp_footer', 'print_partners_scripts' ); 

Если вы хотите зарегистрировать и поставить в очередь свой скрипт вместо того, чтобы отсылать его непосредственно на страницу, вы можете использовать wp_localize-script для передачи ему информации.