WordPressウィジェットでカスタム投稿・カスタムタクソノミーを表示

WordPressのウィジェットを拡張するプラグイン カスタム投稿・カスタムタクソノミーもOK

とある案件で、ウィジェットを使ってカスタム投稿の「最新の記事一覧」、「カテゴリー」、「月別アーカイブ」を表示させたい、といった状況になりました。しかし、通常ウィジェットを使う際には、カスタム投稿、カスタムタクソノミーがサポートされていません。

今回はプラグインの力を借りて要件を満たすことが出来たので、備忘録として残しておきました。

Custom Post Type Widgets

表示したいカスタム投稿タイプや、カスタムタクソノミーを選択した上で「最新の記事一覧」や「月別アーカイブ」などのウィジェットを取り扱うことが出来るようになるプラグインです。

標準ウィジェットと「Custom Post Type Widgets」導入後のウィジェットの比較

プラグイン導入までの流れ

一般的なプラグインのインストール方法と変わりありませんが、インストール後に(2)、(3)の手順を踏んでおくとベターですね。

  1. プラグインをダウンロード・インストールする
  2. 不要な標準ウィジェットを無効にする
  3. 「Custom Post Type Widgets」の不要なウィジェットを無効にする

1. プラグインをダウンロード・インストールする

プラグインは、WordPress.orgからダウンロードできます。

プラグイン名 Custom Post Type Widgets
ダウンロード https://wordpress.org/plugins/custom-post-type-widgets/

2. 不要な標準ウィジェットを非表示・無効にする方法

管理画面で表示されている不要な標準のウィジェットを非表示にするには、テンプレート(お使いのテーマ)フォルダにある「functions.php」に次のコードを書いていきます。

管理画面等で表示されているモノを何か編集する際には大抵「add_filter」、「add_action」を使いますね。使い方と、どんなフィルターフック、アクションフックがあるかを抑えておくとWordPressサイト制作時のカスタマイズの幅が広がってとても便利です。

functions.phpに書くこと

下記のコードは、すべての標準ウィジェットを無効にする場合のセットです。無効にしたくないウィジェットはそのウィジェットの「unregister_widget」部分を削除してもらえば非表示になりません。

<?php
    function unregisterWidgets() {
        /* ---------------------------------------------------------
            WP_Widget_Archives        : アーカイブ
            WP_Widget_Calendar        : カレンダー
            WP_Widget_Categories      : カテゴリー
            WP_Widget_Links           : リンク
            WP_Widget_Meta            : メタ
            WP_Widget_Pages           : ページ
            WP_Widget_Recent_Comments : 最近のコメント
            WP_Widget_Recent_Posts    : 最近の投稿
            WP_Widget_RSS             : RSS
            WP_Widget_Search          : 検索 (検索フォーム)
            WP_Widget_Tag_Cloud       : タグクラウド
            WP_Widget_Text            : テキスト
            WP_Nav_Menu_Widget        : カスタムメニュー
        --------------------------------------------------------- */

        unregister_widget("WP_Widget_Archives");
        unregister_widget("WP_Widget_Calendar");
        unregister_widget("WP_Widget_Categories");
        unregister_widget("WP_Widget_Links");
        unregister_widget("WP_Widget_Meta");
        unregister_widget("WP_Widget_Pages");
        unregister_widget("WP_Widget_Recent_Comments");
        unregister_widget("WP_Widget_Recent_Posts");
        unregister_widget("WP_Widget_RSS");
        unregister_widget("WP_Widget_Search");
        unregister_widget("WP_Widget_Tag_Cloud");
        unregister_widget("WP_Widget_Text");
        unregister_widget("WP_Nav_Menu_Widget");

        return;
    }

    add_action("widgets_init", "unregisterWidgets", 11);
?>

3. 「Custom Post Type Widgets」の不要なウィジェットを無効にする

Custom Post Type Widgetsに何種類かウィジェットが備わっていますが、使うものが一部である場合には標準ウィジェットと併せて非表示にしておくと管理画面がスッキリします。

functions.phpに書くこと

不要なものだけ「unregister_widget」で記述します。

<?php
function unregisterWidgets() {
/* ---------------------------------------------------------
WP_Widget_Archives        : アーカイブ
WP_Widget_Calendar        : カレンダー
WP_Widget_Categories      : カテゴリー
WP_Widget_Links           : リンク
WP_Widget_Meta            : メタ
WP_Widget_Pages           : ページ
WP_Widget_Recent_Comments : 最近のコメント
WP_Widget_Recent_Posts    : 最近の投稿
WP_Widget_RSS             : RSS
WP_Widget_Search          : 検索 (検索フォーム)
WP_Widget_Tag_Cloud       : タグクラウド
WP_Widget_Text            : テキスト
WP_Nav_Menu_Widget        : カスタムメニュー
--------------------------------------------------------- */

unregister_widget("WP_Widget_Archives");
unregister_widget("WP_Widget_Calendar");
unregister_widget("WP_Widget_Categories");
unregister_widget("WP_Widget_Links");
unregister_widget("WP_Widget_Meta");
unregister_widget("WP_Widget_Pages");
unregister_widget("WP_Widget_Recent_Comments");
unregister_widget("WP_Widget_Recent_Posts");
unregister_widget("WP_Widget_RSS");
unregister_widget("WP_Widget_Search");
unregister_widget("WP_Widget_Tag_Cloud");
unregister_widget("WP_Widget_Text");
unregister_widget("WP_Nav_Menu_Widget");

/* ---------------------------------------------------------
WP_Custom_Post_Type_Widgets_Archives        : アーカイブ (カスタム投稿タイプ)
WP_Custom_Post_Type_Widgets_Calendar        : カレンダー (カスタム投稿タイプ)
WP_Custom_Post_Type_Widgets_Categories      : カテゴリー (カスタム投稿タイプ)
WP_Custom_Post_Type_Widgets_Recent_Comments : 最近のコメント (カスタム投稿タイプ)
WP_Custom_Post_Type_Widgets_Recent_Posts    : 最近の投稿 (カスタム投稿タイプ)
WP_Custom_Post_Type_Widgets_Tag_Cloud       : タグクラウド (カスタム投稿タイプ)
--------------------------------------------------------- */

unregister_widget( 'WP_Custom_Post_Type_Widgets_Recent_Posts' );
unregister_widget( 'WP_Custom_Post_Type_Widgets_Archives' );
unregister_widget( 'WP_Custom_Post_Type_Widgets_Categories' );
unregister_widget( 'WP_Custom_Post_Type_Widgets_Calendar' );
unregister_widget( 'WP_Custom_Post_Type_Widgets_Recent_Comments' );
unregister_widget( 'WP_Custom_Post_Type_Widgets_Tag_Cloud' );

return;
}

add_action("widgets_init", "unregisterWidgets", 11);
?>

参考 : カスタム投稿タイプのデフォルトウィジェット一式が詰まったWordPressプラグイン「Custom Post Type Widgets」をリリースしました