WordPressのカテゴリウィジェットから一部のカテゴリを削除
ウィジェット内部で使用しているテンプレートタグ
WordPressのカテゴリ一覧を取得/表示する方法と取得したカテゴリから一部のカテゴリを除外する方法を調べ、
WordPressをカスタマイズする一つの方法について書いてみます。
カテゴリウィジェットの内部では、wp_list_categoriesというテンプレートタグを使用して、カテゴリ一覧を表示しています。
wp list categories WordPress Codex
WordPress codexでdefault usageを確認することができ、wp_list_categories()に渡すことが出来る引数の一覧を把握することが出来ます。
- show_option_all
- orderby
- order
- style
- show_count
- hide_empty
- use_desc_for_title
- child_of
- feed
- feed_type
- feed_image
- exclude
- exclude_tree
- include
- hierarchical
- title_li
- show_option_none
- number
- echo
- depth
- current_category
- pad_counts
- taxonomy
- walker
これらの引数を調整することで、wp_list_categoriesで出力するカテゴリー一覧を柔軟にカスタマイズすることが可能です。
カテゴリーウィジェットの処理を確認
WordPressの
外観 → ウィジェット
でカテゴリーウィジェットを追加することができますが、wp_list_categoriesの引数を自在にカスタマイズすることは出来ない状態になっています。
しかし、カテゴリーウィジェットの処理を確認すると、内部でwp_list_categoriesを使用してカテゴリー一覧を取得/表示していることが確認できます。
wp-includes/default-widgets.php
に定義されている
WP_Widget_Categoriesクラス
の最後の方でwp_list_categories()が使われています。そして、引数をフィルターでカスタマイズ出来るように設定されていることも確認できます。
wp_list_categories( apply_filters( 'widget_categories_args', $cat_args ) );
widget_categories_argsフィルターフックを使用して、引数をカスタマイズ可能な状態にしてあります。設定可能な引数のリストは上で挙げた通りです。
引数のカスタマイズ
フィルターの使用
WordPressのフィルターフックを使うことが出来るので、functions.phpでフィルターを設定します。
最初に標準でどのような引数が設定されているのか、$argsのデータ構造を確認します。
function customize_category_list( $args ) { echo "<pre>"; var_dump($args); echo "</pre>"; return $args; } add_filter( 'widget_categories_args', 'customize_category_list' );
var_dump()したところ以下のデータ構造が表示されました。
array(5) { ["orderby"]=> string(4) "name" ["show_count"]=> string(1) "0" ["hierarchical"]=> string(1) "0" ["title_li"]=> string(0) "" }
設定できる引数の一部のみが標準では使われていることが確認できます。
除外
記事の冒頭で書いたとおり、一部のカテゴリを除外してみます。カテゴリ一覧から特定のカテゴリを除外するためには、
exclude引数
を使用します。
$argsのデータ構造は、key/value形式になっているので、以下のようにして引数を追加します。
function customize_category_list( $args ) { $args['exclude'] = 2; return $args; } add_filter( 'widget_categories_args', 'customize_category_list' );
その他の引数を設定する場合も同じ要領で引数を追加し、カテゴリ一覧の表示をカスタマイズすることが出来ます。