답변:
Mark의 답변을 확장하기 위해 기본 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
필터를 사용하여 위젯 만 구체적으로 타겟팅하고 이러한 기능의 다른 인스턴스는 타겟팅 할 수 없습니다.
즉, 다음을 시도해 볼 수 있습니다. ( TOTALLY 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 );