デフォルトウィジェットをCSSだけでスタイルしたくはありません。デフォルトの「カテゴリ」ウィジェットのコンテンツを自分のHTML構造で表示したいです。
それを行うための利用可能なフィルタやフックはありますか?
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' );
あなたがする必要があることをするためにあなたは完全に新しいウィジェットを作成する必要はありません。私があなたの質問を読んだとき、あなたはただカテゴリーがフロントエンドに表示される方法を変えることに興味があります。フロントエンドにカテゴリを表示する2つの機能があります
wp_list_categories()
リストにカテゴリを表示します
wp_dropdown_categories()
ドロップダウンリストにカテゴリを表示します
これはすべてバックエンドでどのオプションが選択されたかによって異なります
現在、これら2つの関数はそれぞれウィジェット固有のフィルター(それぞれ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 );