Как я могу изменить вывод виджета WordPress по умолчанию?
17
Я не хочу стилизовать виджет по умолчанию только с CSS. Я хочу отобразить содержимое виджета «Категории» по умолчанию с моей собственной структурой HTML.
Тогда вы просто хотите скопировать существующие категории виджета от wp-includes/widgets/class-wp-widget-categories.phpк my_widget.phpвашей теме, и изменить имя класса с тем же именем, что используется в вызове register_widget()выше.
Затем внесите любые изменения, которые вам нравятся! Я предлагаю также изменить заголовок, чтобы вы могли отличить его от стандартного виджета «Категории».
и ниже приведен пример кода, как вы можете переопределить вывод виджета.
ClassMy_Categories_Widgetextends WP_Widget_Categories {function widget( $args, $instance ){// your code here for overriding the output of the widget}}function my_categories_widget_register(){
unregister_widget('WP_Widget_Categories');
register_widget('My_Categories_Widget');}
add_action('widgets_init','my_categories_widget_register');
И причина, по которой я не предлагал это в качестве опции, заключается в том, что вам может понадобиться исходное поведение в какой-то момент, а с вашим решением вы просто потеряете возможность его получить.
Вам не нужно создавать совершенно новый виджет, чтобы делать то, что вам нужно. Когда я читаю ваш вопрос, вы просто заинтересованы в изменении способа отображения категорий в интерфейсе. Есть две функции, которые отображают категории на переднем конце
Все зависит от того, какой вариант был выбран в бэкэнде
Теперь каждая из этих двух функций имеет специальный фильтр виджета ( widget_categories_argsи widget_categories_dropdown_argsсоответственно ), который можно использовать для изменения аргументов, которые должны быть переданы этим функциям. Вы можете использовать это, чтобы изменить поведение списка / выпадающего списка. Однако этого может быть недостаточно, чтобы делать то, что вы хотите.
Кроме того, каждая функция имеет свой собственный фильтр, чтобы полностью изменить способ отображения этих функций.
Мы можем использовать widget_titleфильтр только для конкретного виджета, а не для других экземпляров этих функций.
Короче говоря, вы можете попробовать следующее: ( ПОЛНОСТЬЮ НЕПРОВЕРЕНО )
add_filter('widget_title',function( $title, $instance, $id_base ){// Target the categories baseif('categories'=== $id_base )// Just make sure the base is correct, I'm not sure here
add_filter('wp_list_categories','wpse_229772_categories',11,2);//add_filter( 'wp_dropdown_cats', 'wpse_229772_categories', 11, 2 );return $title;},10,3);function wpse_229772_categories( $output, $args ){// Only run the filter once
remove_filter( current_filter(), __FUNCTION__ );// Get all the categories
$categories = get_categories( $args );
$output ='';// Just an example of custom html
$output .='<div class="some class">';foreach( $categories as $category ){// Just an example of custom html
$output .='<div class="'. echo $category->term_id .'">';// You can add any other info here, like a link to the category
$output .= $category->name;// etc ect, you get the drift
$output .='</div>';}
$output .='</div>';return $output;},11,2);
Ответы:
Чтобы расширить ответ Марка, в стандартных виджетах WordPress (в большинстве случаев) доступно немного (в общем) способов фильтров
widget_text
.Но добавить свой собственный виджет легко - поместите это в
functions.php
:Тогда вы просто хотите скопировать существующие категории виджета от
wp-includes/widgets/class-wp-widget-categories.php
кmy_widget.php
вашей теме, и изменить имя класса с тем же именем, что используется в вызовеregister_widget()
выше.Затем внесите любые изменения, которые вам нравятся! Я предлагаю также изменить заголовок, чтобы вы могли отличить его от стандартного виджета «Категории».
источник
Вы можете переопределить стандартные виджеты WordPress, расширив их. Код для виджета Категории по умолчанию можно найти по следующей ссылке: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/
и ниже приведен пример кода, как вы можете переопределить вывод виджета.
источник
Вам не нужно создавать совершенно новый виджет, чтобы делать то, что вам нужно. Когда я читаю ваш вопрос, вы просто заинтересованы в изменении способа отображения категорий в интерфейсе. Есть две функции, которые отображают категории на переднем конце
wp_list_categories()
который отображает категории в спискеwp_dropdown_categories()
который отображает категории в выпадающем спискеВсе зависит от того, какой вариант был выбран в бэкэнде
Теперь каждая из этих двух функций имеет специальный фильтр виджета (
widget_categories_args
иwidget_categories_dropdown_args
соответственно ), который можно использовать для изменения аргументов, которые должны быть переданы этим функциям. Вы можете использовать это, чтобы изменить поведение списка / выпадающего списка. Однако этого может быть недостаточно, чтобы делать то, что вы хотите.Кроме того, каждая функция имеет свой собственный фильтр, чтобы полностью изменить способ отображения этих функций.
Они соответственно
wp_list_categories
wp_dropdown_cats
Мы можем использовать
widget_title
фильтр только для конкретного виджета, а не для других экземпляров этих функций.Короче говоря, вы можете попробовать следующее: ( ПОЛНОСТЬЮ НЕПРОВЕРЕНО )
источник