Я не хочу стилізувати віджет за замовчуванням лише з CSS. Я хочу відобразити вміст віджетів "Категорії" за замовчуванням зі своєю власною структурою HTML.
Чи є якийсь фільтр або гачок для цього?
Я не хочу стилізувати віджет за замовчуванням лише з CSS. Я хочу відобразити вміст віджетів "Категорії" за замовчуванням зі своєю власною структурою HTML.
Чи є якийсь фільтр або гачок для цього?
Відповіді:
Щоб розширити відповідь Марка, у фільтрах у віджетах WordPress за замовчуванням (за винятком можливо widget_text
), доступно не багато (як правило ).
Але додати власний користувальницький віджет просто - помістіть це у свій functions.php
:
require_once("my_widget.php");
add_action("widgets_init", "my_custom_widgets_init");
function my_custom_widgets_init(){
register_widget("My_Custom_Widget_Class");
}
Тоді ви просто хочете скопіювати наявні категорії віджета від wp-includes/widgets/class-wp-widget-categories.php
до my_widget.php
вашої теми, і змінити ім'я класу з тим же ім'ям, що використовується у виклику register_widget()
вище.
Тоді робіть будь-які зміни, які вам подобаються! Я пропоную також змінити заголовок, щоб ви могли його відрізнити від віджету категорії за замовчуванням.
Ви можете замінити віджети WordPress за замовчуванням, розширивши їх. Код віджета за категоріями за замовчуванням можна знайти за наступним посиланням: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/
і нижче - приклад коду, як можна змінити вихідний віджет.
Class My_Categories_Widget extends 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' );
Вам не потрібно створювати повний новий віджет, щоб робити те, що вам потрібно зробити. Коли я читаю ваше запитання, ви просто зацікавлені в зміні того, як категорії відображаються на передній частині. Є дві функції, які відображають категорії на передній частині
wp_list_categories()
який відображає категорії у списку
wp_dropdown_categories()
який відображає категорії у спадному списку
Все це залежить від того, який варіант був обраний у бекенді
Тепер у кожної з цих двох функцій є фільтр для віджетів ( widget_categories_args
і widget_categories_dropdown_args
відповідно ), який ви можете використовувати для зміни аргументів, які слід передавати цим функціям. Ви можете використовувати це для зміни поведінки списку / випадаючого списку. Однак цього може бути недостатньо для того, щоб робити те, що ти хочеш.
Крім того, кожна функція має власний фільтр, щоб повністю змінити спосіб, як ці функції повинні відображати свій вихід.
Вони відповідно є
Ми можемо використовувати widget_title
фільтр, щоб спеціально орієнтуватися лише на віджет, а не на інші екземпляри цих функцій.
Коротше кажучи, ви можете спробувати наступне: ( ПОВНІСТЮ UNTESTED )
add_filter( 'widget_title', function( $title, $instance, $id_base )
{
// Target the categories base
if( '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 );