Wordpress: ставить скрипт в очередь, только если используется виджет - PullRequest
4 голосов
/ 25 августа 2011

Существует ли способ поставить скрипт в очередь, только если используется виджет (обратите внимание, не активен ли он, но присутствует ли он внутри боковой панели на странице / в посте)? Или даже лучше: есть способ поставить скрипт в очередь, только если конкретная строка появляется внутри боковой панели?

Ответы [ 3 ]

9 голосов
/ 18 июля 2012

Просто поставьте скрипт или таблицу стилей в функцию виджета. Это самый простой и лучший подход.

    public function widget( $args, $instance ) {
        // outputs the content of the widget

        // Enqueue a script needed for
        // the Widget's output
        wp_enqueue_script( 'your_script', $path, $deps );

        // Rest of widget output goes here...
    }
2 голосов
/ 11 апреля 2013

Да.

Я рассмотрел хук 'wp_footer', потому что этот хук выполняется в нижнем колонтитуле и, вероятно, является лучшим способом добавить сценарии только там, где используется виджет.

class Your_Widget extends WP_Widget{

    function widget( $args, $instance ) {

         add_action('wp_footer',array($this,'front_end_scripts'));

    }

    function front_end_scripts(){
       ?><script type="text/javascript">
          console.log('this works!');
        /*
          Or if you need external scripts then you may use 
          $.getScript([your-script-url] );
        */
        </script> <?php
    }



}
2 голосов
/ 25 августа 2011

Я на самом деле не тестировал, но одним из возможных решений было бы поставить ваш скрипт в нижний колонтитул.

Если используется виджет

Когда вы создаете виджет, вы можете добавитьнекоторый код для функции widget() класса вашего виджета (функция фактически выводит виджет на экран).Вы можете позвонить wp_enqueue_script() отсюда, просто убедитесь, что вы отметили его для использования в нижнем колонтитуле .

Это напечатает ваш скрипт, где вызывается wp_footer(), а не wp_head() вызывается, но только если виджет вызывается на странице.

Если строка появляется на боковой панели

По сути, просто отфильтруйте боковую панель для вашей строки.Если строка присутствует, поставьте свой скрипт в нижний колонтитул так же, как и в виджете.


(обновление) Альтернативы

Есть две другие вещи, которые вы можете сделать.Во-первых, вы можете использовать jQuery для пространства имен вашей функциональности.По сути, присвойте своему виджету уникальный идентификатор (скажем, «my-unique-id»), а затем асинхронно загрузите ваш скрипт:

jQuery(document).ready(function() {
    if( jQuery('#my-unique-id').length > 0 ) {

        jQuery.getScript( [your-script-url] );

    }
}

Этот код проверит, находится ли ваш идентификатор виджета на странице.Если это так, он загружает ваш скрипт с сервера, если нет, он ничего не делает.Вы также можете создать этот код на PHP, чтобы включить относительную или абсолютную ссылку на ваш файл скрипта.Это зависит от вас.

В качестве альтернативы, вы можете просто включить свой скрипт в встроенный блок <script> в коде вашего виджета.Это будет работать так, как вы хотите, но нарушает все виды стандартных методов кодирования.Код обычно должен быть в <header> или помещен непосредственно перед закрывающим тегом </body> ... но вы можете поместить его в любом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...