WordPressの投稿画面でカテゴリを選択するときに「よく使うもの」というのがあると思います。
カテゴリ選択で、よく利用する「カテゴリーのみ」が表示されたやつです。
けれど、これってデフォルトで10個までしか表示されません。中には「ちょっと少なすぎ」と思う方もおられるみたいでフォーラムの方に「よく使うもののアイテムの数を増やす方法はないか」という質問が来ました。
それで、WordPressコアファイルを覗いてみたのですが、結果的にこれといった方法はなかったです。
やるとしたらコアファイルを直接編集するしかなさそう。
けれど、コアファイルを編集せずともテーマのfunctions.phpにコードを書けば、何とか成立する方法を見つけたので紹介します。
無理やりな方法だけど、WordPressコアファイルに変更加えないでテーマファイルのみで完結させるには、これしかないよな。
目次
「よく使うもの」アイテムを増やすカスタマイズ方法
カスタマイズを行うには、テーマ(子テーマ)のfunctions.phpに以下のようにコピペします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //投稿ページのカテゴリ選択の「よく使うもの」の数を変更する add_action('pre_get_terms', 'pre_get_terms_custom', 10, 1); if ( !function_exists( 'pre_get_terms_custom' ) ): function pre_get_terms_custom($query){ global $pagenow; if (is_admin() && ($pagenow == 'post.php' || $pagenow == 'post-new.php')) { $query_vars = $query->query_vars; $is_orderby = $query_vars['orderby'] == 'count'; $is_order = $query_vars['order'] == 'DESC'; $is_fields = $query_vars['fields'] == 'all'; $is_hierarchical = $query_vars['hierarchical'] == false; $is_number = intval($query_vars['number']) == 10; if ($is_orderby && $is_order && $is_fields && $is_hierarchical && $is_number) { $query->query_vars['number'] = 20; //このカード好きな数に変更する } } } endif; |
表示する数を好みの数に変更するには「20」と書かれた数字を変更してください。
やっていること
それにしても、かなりの無理やり感。
やっていることは、pre_get_terms(ターム取得直前)のフックをとらえて、数あるpre_get_terms呼び出しの中から、「よく使うもの」っぽいものを条件指定して、クエリを変更しています。
簡単に言うと、数多くあるpre_get_termsから以下の条件に絞ってクエリ変更をしています。
- 管理画面で使われている
- 投稿ページ(post.phpもしくはpost-new.php)で使われている
- クエリの並び替えはcountで行われている
- 並び替えの順番は降順である
- 取得するフィールドはすべて
- 階層をは利用していない
- 取得する数は10である
もしかしたもう少し条件を絞ることもできるかと思います。けれど、「これだけの条件に合うのは【よく使うもの】に使うクエリしかないだろう」ということで実装しています。
クエリで言うと、以下のような条件に合わせています。
動作確認
これにより、以前は以下のような10個しか表示されなかった「よく使うもの」アイテムを
以下のように好みの数に応じて増やすことが可能です。
まとめ
それにしても、かなり無理やりなカスタマイズ方法だと自分でも思います。
正直言って、美しい方法ではないかもしれません。
刑事事件に例えるならば、通常のカスタマイズを「明確な物的証拠を明示した立件」だったとしたら、今回のカスタマイズは「状況証拠を集めに集めてようやく立件」といった感じ。
専用のフックを利用しているわけでもないので、もし管理画面に同様の条件を行うクエリがあれば誤動作してしまう可能性もなきにしもあらずです。
なので、「良いテーマ側で出来るカスタマイズ方法」をご存知の方がおられましたら、是非教えていただければ幸いです。