Tôi không muốn tạo kiểu cho widget mặc định chỉ bằng CSS. Tôi muốn hiển thị nội dung tiện ích 'Danh mục' mặc định với cấu trúc HTML của riêng tôi.
Có sẵn bộ lọc hoặc hook để làm điều đó không?
Tôi không muốn tạo kiểu cho widget mặc định chỉ bằng CSS. Tôi muốn hiển thị nội dung tiện ích 'Danh mục' mặc định với cấu trúc HTML của riêng tôi.
Có sẵn bộ lọc hoặc hook để làm điều đó không?
Câu trả lời:
Để mở rộng câu trả lời của Mark, không có nhiều (nói chung) có sẵn theo cách các bộ lọc trong các tiện ích mặc định của WordPress (ngoại trừ có lẽ widget_text
).
Nhưng việc thêm tiện ích tùy chỉnh của riêng bạn rất dễ dàng - hãy đặt tiện ích này vào 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");
}
Sau đó, bạn chỉ đơn giản là muốn sao chép các loại hiện có phụ tùng từ wp-includes/widgets/class-wp-widget-categories.php
để my_widget.php
trong chủ đề của bạn, và thay đổi tên lớp với tên giống như được sử dụng trong các cuộc gọi đến register_widget()
ở trên.
Sau đó thực hiện bất kỳ thay đổi nào bạn muốn! Tôi cũng đề nghị thay đổi tiêu đề để bạn có thể phân biệt với tiện ích Danh mục mặc định.
Bạn có thể ghi đè các widget WordPress mặc định bằng cách mở rộng chúng. Mã cho tiện ích Danh mục mặc định có thể được tìm thấy trên liên kết sau: https://developer.wordpress.org/reference/groupes/wp_widget_clists/widget/
và bên dưới là mã ví dụ về cách bạn có thể ghi đè đầu ra của 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' );
Bạn không cần phải tạo một widget hoàn chỉnh mới để làm những gì bạn cần làm. Khi tôi đọc câu hỏi của bạn, bạn chỉ quan tâm đến việc thay đổi cách các danh mục được hiển thị ở mặt trước. Có hai chức năng hiển thị các danh mục ở mặt trước
wp_list_categories()
trong đó hiển thị các danh mục trong một danh sách
wp_dropdown_categories()
trong đó hiển thị các danh mục trong danh sách thả xuống
Tất cả phụ thuộc vào tùy chọn nào được chọn trong phần phụ trợ
Bây giờ, mỗi trong hai hàm này có một bộ lọc cụ thể cho widget ( widget_categories_args
và widget_categories_dropdown_args
tương ứng ) mà bạn có thể sử dụng để thay đổi các đối số sẽ được truyền cho các hàm này. Bạn có thể sử dụng điều này để thay đổi hành vi của danh sách / thả xuống. Tuy nhiên, điều này có thể không đủ để làm những gì bạn muốn.
Ngoài ra, mỗi chức năng có bộ lọc riêng để thay đổi hoàn toàn cách thức các chức năng này hiển thị đầu ra của chúng.
Họ tương ứng là
Chúng tôi có thể sử dụng widget_title
bộ lọc để chỉ nhắm mục tiêu cụ thể vào tiện ích và không phải các phiên bản khác của các chức năng này.
Nói tóm lại, bạn có thể thử các cách sau: ( HOÀN TOÀN KHÔNG GIỚI HẠN )
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 );