kaiser
  • 0
Гуру

Область виджета: изменить $param[‘xy’] из widget-$n

  • 0

У меня есть разные области виджетов. Одна горизонтальная область, которая может содержать, например. 4 виджета рядом друг с другом. Мой вопрос в том, как бы я добавил другой, например. $param['widget_title'] на номер виджета $n (через фильтр)?

Я уже пробовал использовать wp_registered_widgets(); функцию и разные глобальные переменные, но безрезультатно.

Share
  1. Фильтр dynamic_sidebar_params вызывается перед отображением каждого виджета, я думаю, вы можете использовать его для достижения того, чего хотите. Он фильтрует параметры $args и $instance, которые будут переданы виджету.

    • 0
  2. Фильтрdynamic_sidebar_params вызывается перед отображением каждого виджета, поэтому несколько раз на одной и той же боковой панели . Он фильтрует параметры $args и $instance, которые будут переданы виджету.

    Если вы хотите выполнить его только для третьего виджета определенной боковой панели, вы должны проверить идентификатор боковой панели (найденный в id значении $args массива, которое передается первым), а затем подсчитать виджеты, пока не получите n. Сделать это можно разными способами: можно получить все виджеты текущей боковой панели и сравнить ID n -го с фильтруемым сейчас, а можно просто посчитать в своем фильтре, сбрасывая счетчик при получении новое название боковой панели. Или вы можете заменить dynamic_sidebar() в своем шаблоне вызов собственной функции, которая сначала сбросит счетчик виджетов, а затем начнет фильтрацию.

    Это пример второго типа: подсчет виджетов в функции, сброс счетчика каждый раз, когда мы запускаем новую боковую панель:

    add_filter( 'dynamic_sidebar_params', 'wpse15024_dynamic_sidebar_params' );
    function wpse15024_dynamic_sidebar_params( $params )
    {
        // These are the targets. Modify them here:
        $targeted_sidebar = 'sidebar-bottom';
        $targeted_widget = (int) 3;
    
        static $widget_counter = array();
        static $current_sidebar = null;
    
        $args = $params[0];
        $instance = $params[1];
    
        if ( $current_sidebar != $args['id'] ) {
            $current_sidebar = $args['id'];
            $widget_counter[$current_sidebar] = 0;
        }
    
        if ( $current_sidebar == $targeted_sidebar && $widget_counter[$current_sidebar] == $targeted_widget ) {
            $args['before_widget'] = '<div id="'.@$args['widget_id'].'" class="span-6 last">';
        }
    
        $widget_counter[$current_sidebar]++;
    
        return array( $args, $instance );
    }
    
    • 0
  3. Таким образом, все работает… но взгляните на подход Яна.

    Это рабочий код:

    function wpse15024_modify_widget_params( $params )
    {
        // These are the targets. Modify them here:
        $targeted_sidebar = 'sidebar-bottom';
        $targeted_widget = (int) 3;
    
        $sidebars_widgets = wp_get_sidebars_widgets();
    
        if ( $params[0]['id'] == $targeted_sidebar && $params[0]['widget_id'] == $sidebars_widgets[$targeted_sidebar][$targeted_widget] )
        {
            $params[0]['before_widget'] = '<div id="'.@$params[0]['widget_id'].'" class="span-6 last">';
        }
    
        return $params;
    }
    add_filter( 'dynamic_sidebar_params', 'wpse15024_modify_widget_params' );
    
    • 0

Оставить ответ

You must login to add an answer.