Как вставить скрипт JS на страницу Worpress через свой плагин на php?
У меня есть сайт на Wordpress. К нему я написал плагин на php и в нём я через шорткод вывожу HTML код на страницу. Как мне вместе с HTML кодом вывести ещё скрипт на JS, чтобы он работал внутри этого шорткода? JS мне нужен для реализации множественной фильтрации карточек по нажатию нескольких переключателей.
Дополнительно:
Ответы:
function enqueue_scripts_for_short(){ global $post; if( has_shortcode( $post->post_content, 'my-shortcode') && ( is_single() || is_page() ) ){ wp_enqueue_script('my-custom-js', get_template_directory_uri().'/js/my-custom.js'); } } add_action( 'wp_enqueue_scripts', 'enqueue_scripts_for_short' ); |
function enqueue_scripts_for_short(){ global $post; if( has_shortcode( $post->post_content, 'my-shortcode') && ( is_single() || is_page() ) ){ wp_enqueue_script('my-custom-js', get_template_directory_uri().'/js/my-custom.js'); } } add_action( 'wp_enqueue_scripts', 'enqueue_scripts_for_short' );
- А можете, пожалуйста, объяснить этот код? Этот код нужно вставить в код плагина php? И вроде, как я понимаю, эта функция для внедрения скрипта из файла, а мне очень желательно вставить прямо из того же файла с плагином php.
- Никита, что такое ?
вставить прямо из того же файла с плагином php.
Это функция которую можно вставить в плагин, да, скрипт вставится только тогда когда в контенте страницы присутствует шорткод
- WP Panda, то есть мне нужно подключить скрипт js не из отдельного файла с расширением .js, а из кода самого плагина для Wordpress на php
- Никита, это глупо, но если очень хочется, то что мешает добавить скрипт в тот же шорткод?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
JS для shortcode в WordPress лучше подключать через
wp_enqueue_script(), а не печатать большой скрипт прямо внутри HTML. Тогда WordPress сможет правильно поставить зависимости, версию, загрузку в footer и не будет дублей, если shortcode встречается несколько раз на странице.Внутри плагина можно сделать так:
add_shortcode('cards_filter', function () { wp_enqueue_script( 'cards-filter', plugin_dir_url(__FILE__) . 'assets/cards-filter.js', [], '1.0.0', true ); ob_start(); ?> <div class="cards-filter"> <button data-filter="php">PHP</button> <button data-filter="js">JS</button> <div class="card" data-tags="php js">Карточка</div> </div> <?php return ob_get_clean(); });
Если очень нужно вставить короткий inline-скрипт из того же PHP-файла, используйте
wp_add_inline_script()после регистрации основного скрипта:wp_register_script('cards-filter-empty', '', [], '1.0', true); wp_enqueue_script('cards-filter-empty'); wp_add_inline_script('cards-filter-empty', 'console.log("filter ready");');
Но для фильтрации карточек лучше всё-таки отдельный JS-файл. Его проще отлаживать, минифицировать, кэшировать и не смешивать с PHP-разметкой.
Также shortcode должен возвращать HTML, а не выводить его напрямую через
echo. Иначе при вставке в редактор или конструктор блок может появиться не в том месте.Если скрипт должен получать настройки из PHP, передавайте их через
wp_localize_script()илиwp_add_inline_script()до основного кода: AJAX URL, nonce, список фильтров, переводы надписей. Не вставляйте эти данные в глобальные переменные прямо в HTML shortcode без экранирования.Для множественной фильтрации карточек храните значения в
data-атрибутах и в JS сравнивайте выбранные фильтры с набором тегов карточки. Так код не будет зависеть от текста кнопок и проще переживёт перевод сайта или изменение названий категорий.