horacionuez
  • 0
Новичок

Проблемы с аргументами боковой панели и wp_list_bookmarks

  • 0

Я столкнулся с проблемой, пытаясь использовать аргументы боковой панели (before_widget, after widget, after_widget, before_widget) в качестве дружественных параметров стиля темы для функции wp_list_bookmarks, то есть вывод wp_list_bookmarks будет выглядеть так же, как и внутри WP_Widget_Links.

Я почти дословно скопировал код виджета ссылок, но при попытке повторно использовать только один аргумент боковой панели (через глобальные $wp_registered_sidebars) я получаю некоторые классы CSS для контейнера виджета, которые не отображаются с использованием WP_Widget_Links.

Например, следующий дамп аргументов боковой панели:

'name' => 'Sidebar 1'
'id' => 'sidebar-1'
'before_widget' => '<li id="%1$s" class="widget %2$s">'
'after_widget' => '</li>'  
'before_title' => '<h2 class="widgettitle">'
'after_title' => '</h2>'

Прочитав код wp, я предположил, что безопасно изменить %1$s, %2$s на %id, %class соответственно, а затем, как только wp_list_bookmarks будет выполнен, я должен закончить с before_widget, похожим на <li id="linkcat-" class="widget linkcat"> . Но после сравнения с выводом виджета ссылок имя класса виджета css отсутствует, и вывод моего кода выглядит немного странно на странице.

Это код, в котором я использую функцию, которая вызывается как фильтр для sidebars_widgets:

function my_sidebars_widgets($sidebar_widgets) {
    global $wpdb, $wp_registered_sidebars;
    static $hits;
    if(++$hits == 2) {

        $sidebar = array_values($wp_registered_sidebars);

        $before_title = $sidebar[0]['before_title'];
        $after_title = $sidebar[0]['after_title'];
        $before_widget = $sidebar[0]['before_widget'];
        $after_widget = $sidebar[0]['after_widget'];

        $before_widget = str_replace('%2$s','%class',$before_widget);
        $before_widget = str_replace('%1$s','%id',$before_widget);

        wp_list_bookmarks(apply_filters('widget_links_args',array(
            'title_before' => $before_title, 'title_after' => $after_title,
            'category_before' => $before_widget, 'category_after' => $after_widget,
            'hide_invisible' => true,'title_li' => 'Links',
            'categorize' => 0,'inquiry' => true
        )));
    }
    return $sidebar_widgets;
}

У вас есть хоть малейшее представление о том, чего мне здесь не хватает? Я продолжаю пытаться понять, как WP передает аргументы виджетов, но пока не объяснено при чтении кода.

заранее спасибо за любые ваши соображения.

Share
  1. Вы опубликуете полный вывод (HTML) того wp_list_bookmarks, что вы пытаетесь сделать именно так. Вы пытаетесь вывести список закладок в своей теме или написать плагин? Если первый см. wp_list_bookmarks

    • 0
  2. Через несколько var_dumps я знаю это:

    1) Когда wp_list_bookmarks вызывается в WP_Widget_Links->widget 'class', параметр игнорируется, поскольку 'category_before' параметр не имеет %class подстановочного знака. Вместо этого 'category_before' будет выглядеть «класс», где 'widget_links' .

    Вот как функция dynamic_sidebar устанавливает параметры $before_widget для виджета после его вызова.

    Конечно, это можно изменить с помощью таких фильтров, как 'widget_links_args' или 'dynamic_sidebar_params' .

    2) Во многих темах для представления виджетов по умолчанию вызывается wp_list_bookmarks, но с нулевыми параметрами, тогда используются значения по умолчанию, как определено в bookmark-template.php:

    ('class' => 'linkcat','category_before' => '<li id="%id" class="%class">')
    

    и это происходит, даже если боковая панель зарегистрирована с помощью:

    ('before_widget' => '<li id="%1$s" class="widget %2$s">')
    

    что может привести к небольшому несоответствию, потому что параметр WP_Widget_Links 'category_before' изначально заимствован из 'before_widget' параметра боковой панели.

    • 0

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

You must login to add an answer.