【WordPress備忘録】通常の「投稿」タイプにカスタムタクソノミーを追加したい

備忘録
この記事は約7分で読めます。

WordPress初心者の備忘録。

知識がほぼないため意図した形にするまでかなり手こずりました。

やりたかったのは、通常の「投稿タイプ」に「カスタムタクソノミー」を追加し、それを記事内とサイドバーに表示させること。

今後のために手順をまとめておきます。

カスタム投稿タイプとは

このブログでは以前、通常の「投稿タイプ」と併用して「カスタム投稿タイプ」も利用していました。

「カスタム投稿タイプ」とは、通常の「投稿タイプ」とは構成の異なる、もうひとつの「投稿」を作成できる機能のこと。

例えば、このブログでは記事の内容によって「日常」「子供の成長」「お出掛け」などでカテゴリー分けをしています。

カテゴリーの分類はいくつでも追加できますが、「カテゴリー」自体は1種類です。

「カスタム投稿タイプ」では、この「カテゴリー」自体の種類を増やすことができます。

以前は「カスタム投稿タイプ」を利用して「食べ歩き」の記事を作成していましたが、

カテゴリーが1種類しかない場合、食べたジャンル、食べたエリアなどをカテゴリーとして追加したとしても、それらが全て一緒くたのグループにまとめられてしまいます。

「カスタム投稿タイプ」を利用し、カテゴリーを増やすことができると、このようなまとめ方ができるようになります。

「カスタム投稿タイプ」でのカテゴリーやタグの分類のことを「カスタムタクソノミー」、その中の項目を「ターム」と呼びます。

「カスタム投稿」自体も、必要に応じていくつでも追加することができます。

カスタム投稿をやめて、通常の投稿でひとまとめにする

以前は、「投稿タイプ」で通常のブログを、「カスタム投稿タイプ」で食べ歩きのほか、ペットや備忘録のブログを分けて管理していました。

少し前にそれを面倒に感じてしまい、すべて通常の「投稿タイプ」にまとめ、「食べ歩き」「ペット」「備忘録」などを新たなカテゴリーとして追加しました。

「食べ歩き」記事で使っていた「エリア」「ジャンル」の「カスタムタクソノミー」(カテゴリー)は消滅することになり、それぞれの「ターム」を「タグ」として登録しました。

が、

それだと「A地区」「B地区」で探したい、「ラーメン」「寿司」で探したいというときに、無秩序に溢れかえった「タグ」の中から探さなければなりません。

これでは非常に使いづらい。

そこで、通常の「投稿タイプ」に新たなカテゴリー、「カスタムタクソノミー」を追加し、以前のように「ジャンル」「エリア」ごとに項目(ターム)まとめられるようにしてみました。

実際の構造はこんなふうになります。

これを、カテゴリー「食べ歩き」を閲覧しているときのみ「ジャンル」「エリア」が表示されるよう設定することで、見せかけの構造をこんな感じにしたい、という試みです。

カスタムタクソノミーを追加する

初っ端から手こずりました。

「カスタム投稿タイプ」での「カスタムタクソノミー」の追加方法は調べればいくらでも出てくるのですが、

通常の「投稿タイプ」に追加する方法を見つけられず、オープンAIの助けを借りながら作業をすすめました。

少しでも知識があれば何てことのない部分だったと思います…

次のコードを「functions.php」に記述します。

その前に、「functions.php」の編集でエラーが発生すると、私のような初心者ではパニックに陥ることもあるので、編集前にバックアップを取ることをお勧めします。

// 「投稿」にカスタムタクソノミーを追加する
add_action( 'init', 'create_custom_taxonomies', 0 );

function create_custom_taxonomies() {
    // 1つ目のタクソノミー
    register_taxonomy(
        'area',     // タクソノミーのスラッグ
        'post',     // 紐付ける投稿タイプ(通常の投稿は 'post')
        array(
            'label' => 'エリア',  // タクソノミーの表示
            'hierarchical' => true, // trueでカテゴリー形式、falseでタグ形式
            'show_in_rest' => true, // ブロックエディターで表示させる
        )
    );

    // 2つ目のタクソノミー
    register_taxonomy(
        'genre',
        'post',
        array(
            'label' => 'ジャンル',
            'hierarchical' => true,
            'show_in_rest' => true,
        )
    );

「タクソノミーのスラッグ」と「タクソノミーの表示」部分に任意の文字を入れます。

ここでは、タクソノミー:「エリア」・スラッグ:「area」と、タクソノミー:「ジャンル」・スラッグ:「genre」の2つを追加しました。

管理画面内メニュー「投稿」を見てみると、通常の「カテゴリー」「タグ」の下に新たなタクソノミーが追加されました。

これで記事作成時に、通常のカテゴリーとは別に追加したタクソノミーも登録することができるようになります。

記事内にカスタムタクソノミーの情報を表示する

こんなふうに、記事内にタクソノミーの情報を表示したい。

以前は自作テーマを使用していたので、自分で「single.php」内をいじることができたのですが、

現在は超便利な「cocoon」を利用させていただいてるので、「ウィジェット」を使用して「投稿本文上」に表示させることにしました。

ここで困ったことがひとつ。

「ウィジェット」では「PHPコード」を使用することができません。

プラグインを使えば一番簡単なのですが、前に「PHPコード」が利用できるプラグインで不具合が発生し、原因をつきとめるのにかなり苦労したことがあるので、できることならプラグインに頼りたくない。

そこで、「functhions.php」にカスタムタクソノミーの情報を表示させる「PHPコード」を記述し、「ウィジェット」から「ショートコード」でその内容を呼び出すことにしました。

【functions.php】

// 記事内にカスタムタクソノミーを表示する
add_shortcode('widget_php_genre', function() {
    global $post;
    // 記事ページ(single)の場合のみ、タクソノミーを表示
    if ( is_single() ) {
        return get_the_term_list( $post->ID, 'genre', 'ジャンル:', ', ' );
    }
});

add_shortcode('widget_php_area', function() {
    global $post;
    // 記事ページ(single)の場合のみ、タクソノミーを表示
    if ( is_single() ) {
        return get_the_term_list( $post->ID, 'area', 'エリア :', ', ' );
    }
});

書き換えるのはこの部分だけ。

add_shortcode('PHPコードを呼び出すためのショートコード', function() {
return get_the_term_list( $post->ID, '①タクソノミーのスラッグ', '②タームの先頭に表示する文字列', '③ターム間に表示する文字列' );

では次に、ウィジェットの「カスタムHTML」にPHPコードを呼び出すショートコードを記述します。

先ほど「functions.php」で設定した「PHPコードを呼び出すためのショートコード」を [ ] で囲むだけ。

で、このままだと関係ないカテゴリーの記事にも表示されてしまうので、

「表示設定」を「チェック・入力したページで表示する」にし、カテゴリーで「食べ歩き」にチェックを入れます。

これで「食べ歩き」カテゴリーの記事のみ、指定した場所にカスタムタクソノミーの情報が表示されます。

サイドバーにカスタムタクソノミーの一覧を表示する

同じようにショートコードを使って、カスタムタクソノミーの一覧をサイドバーに表示させようとしたのですが、意図した体裁にならずに断念。

あれこれ色々試してみましたが、どうしても上手くいかず、最終的にウィジェットの「タグクラウド」で解決しました。

「タグクラウド」内に「タクソノミー」という項目が追加されていたため、ここで任意のタクソノミーを指定。

先ほどと同じように「表示設定」で「食べ歩き」のみ表示するように設定します。

見た目はCSSで変えられるのでしょうが、デフォルトのままでも気に入っているので、とりあえずこのまま。

404エラーが出た場合

最後に、項目(ターム)をクリックしてアーカイブページを確認してみましたが、

ここでまさかの「404」エラー。

自作テーマでは「archive.php」というファイルを作成して表示していた記憶があったので、

この「cocoon」でそれをまた新しく作るのか?かなり難しいのでは!?と狼狽してしまいましたが、

これは拍子抜けするほどあっさり解決しました。

その方法は、管理画面の「設定」→「パーマリンク」で、何もしないで「変更を保存」をクリックするだけ。

アーカイブページに新しく追加したカスタムタクソノミーの一覧が無事表示され、これでなんとか作業が完了。

あとは、以前設置していた「エリア」+「ジャンル」というカスタムタクソノミーの組み合わせによる「サイト内検索」も復活させたかったのだけど、

今回は初歩的なところで四苦八苦し続けて疲れてしまったので、気力が回復した頃にまたトライしたいと思います…

COMMENT

タイトルとURLをコピーしました