как получить is_active_widget на активной / бегущей странице?- функция WordPress - PullRequest
2 голосов
/ 12 октября 2011

Я ищу решение для проверки is_active_widget на определенной странице.Я получил это https://wordpress.stackexchange.com/questions/2302/loading-scripts-only-if-a-particular-shortcode-or-widget-is-present
Однако второй способ sorich87 по-прежнему загружает скрипты виджета на каждую страницу, где на текущей / активной странице нет определенного активного виджета.Даже когда боковая панель каждой страницы имеет разные идентификатор и имя.
Например:У меня есть страница «A» (с боковой панелью «A1»), которая состоит из активного виджета «X» и x_scripts в нем.Затем, когда я проверяю страницу «B» (с боковой панелью «B1»), которая не содержит виджет «X», он все равно загружает x_scripts виджета «X».Кажется, что эта функция is_active_widget проверяет только общий активированный виджет, но не на рабочей странице.

Это мой код:

class X extends WP_Widget
{
        function X(){
            $widget_ops = array('description' => 'X widget');
            $control_ops = array('width' => 200, 'height' => 500);
            parent::WP_Widget(false,$name='X-widget',$widget_ops,$control_ops);

            if ( is_active_widget(false, false, $this->id_base, true) ){
                add_action('wp_head', 'x_styles',0);
                add_action( 'wp_footer', 'x_scripts' );
            }
        }

    //rest of functions here
}

Как это предотвратить?

Ответы [ 2 ]

0 голосов
/ 19 июня 2012

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

0 голосов
/ 16 июня 2012

Да, is_active_widget() получить значение из опций, сохраненных в базе данных.Поэтому он вернет true для всех активных виджетов.is_active_sidebar() ведет себя одинаково, даже если боковая панель не загружена на определенных страницах, возвращаемое значение всегда будет истинным, пока боковая панель зарегистрирована.

Обе функции проверяют глобальные $wp_registered_widgets, $_wp_sidebars_widgets, $sidebars_widgets какие значения генерируются из register_sidebar() и виджетов, добавленных на боковую панель.

К сожалению, для этого нет обходного пути.Поскольку dynamic_sidebar() загружается после wp_head(), невозможно привязать к нему скрипт или таблицу стилей.Сценарий, стили или все, что вы подключите к wp_head, всегда будет там, даже если боковая панель загружена или нет, если виджет неактивен.

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

Ну, вот мои два цента

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