Я столкнулся с проблемой, пытаясь использовать аргументы боковой панели (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 передает аргументы виджетов, но пока не объяснено при чтении кода.
заранее спасибо за любые ваши соображения.
Вы опубликуете полный вывод (HTML) того
wp_list_bookmarks
, что вы пытаетесь сделать именно так. Вы пытаетесь вывести список закладок в своей теме или написать плагин? Если первый см. wp_list_bookmarksМожете ли вы также включить код, который вы используете для вызова
wp_list_bookmarks()
? Вы можете отредактировать свой вопрос, чтобы сделать это, вам не нужно делать это в комментарии.@BandonRandom: спасибо за ответ, я определяю плагин. И результат, который я хочу, — это тот, который получает стиль темы.
Через несколько
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:
и это происходит, даже если боковая панель зарегистрирована с помощью:
что может привести к небольшому несоответствию, потому что параметр WP_Widget_Links
'category_before'
изначально заимствован из'before_widget'
параметра боковой панели.