質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

【WordPress】カスタム投稿のアーカイブとタクソノミーのテンプレートファイル

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 113

score 17

前提・実現したいこと

カスタム投稿をfunctions.phpで設定しています。

カスタム投稿のスラッグ:article
カスタム投稿のタクソノミーのスラッグ:article-cat

上記が前提条件で、テンプレートとなるファイルを、
/article/ならarchive-article.php
/article/ターム名/ならtaxonomy-article-cat.php
にしたいです。

発生している問題・エラーメッセージ

/article/でアクセスすると、ちゃんとarchive-article.phpが読み込まれます。
ですが、/article/ターム名/でアクセスすると、taxonomy-article-cat.phpではなくarchive-article.phpのファイルがサイト上で表示されてしまいます。

どうすればいいでしょうか?

気になる点

functions.phpでURLをリライトしています。
これがなにかいけないのでしょうか?

カスタム投稿の記事詳細を、/article/タクソノミーのターム名/記事ID/にしています。

(functions.phpの一部抜粋)

/**
 * URLリライト
 */
function my_custom_post_rewrite() {
  global $wp_rewrite;
  // * ↓ ↓ ↓ 複数ある場合はこの単位で複製する ↓ ↓ ↓ *
  $wp_rewrite->add_rewrite_tag('%article%', '(article)','post_type=');
  $wp_rewrite->add_permastruct('article', '/%article%/%article-cat%/%post_id%/', false);
  // * ↑ ↑ ↑ 複数ある場合はこの単位で複製する ↑ ↑ ↑ *
}
add_action('init', 'my_custom_post_rewrite');

function my_custom_posttype_permalink($post_link, $id = 0, $leavename) {
  global $wp_rewrite;
  $post_delivery = get_post($id);
  $post = $post_delivery;
  if(is_wp_error( $post )){
    return $post;
  }
  // * ↓ ↓ ↓ 複数ある場合はこの単位で複製する ↓ ↓ ↓ *
  if('article' === $post->post_type){
    $newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
    $newlink = str_replace('%article%', $post->post_type, $newlink);

    $get_term = get_the_terms($post->ID, 'article-cat');
    $term_name = array_shift($get_term);
    $term_slug = $term_name->slug;

    $newlink = str_replace('%article-cat%', $term_slug, $newlink);
    $newlink = str_replace('%post_id%', $post->ID, $newlink);
    $newlink = home_url(user_trailingslashit($newlink));
    return $newlink;
  }
  // * ↑ ↑ ↑ 複数ある場合はこの単位で複製する ↑ ↑ ↑ *
  return $post_link;
}
add_filter('post_type_link', 'my_custom_posttype_permalink', 1, 3);
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • yuki84web

    2021/06/27 18:34

    スラッグをarticlecatにしてテンプレートファイル名をtaxonomy-articlecat.phpみたいにするとどうなりますか?

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る