サポート » 使い方全般 » /カスタム投稿名/ターム名/とするパーマリンク設計方法

  • 解決済 U2

    (@agechu)


    以下の様なパーマリンク構造を目標としています。

    1.カスタム投稿のアーカイブ hogehoge.com/カスタム投稿名/
    2.カスタムタクソノミーのタームのアーカイブ hogehoge.com/カスタム投稿名/ターム名/
    3.カスタム投稿記事ページ hogehoge.com/カスタム投稿名/%postname%/

    しかし、2.タームのアーカイブが、以下でしか表示されません。
    hogehoge.com/カスタムタクソノミー名/ターム名/

    パーマリンクの設定には、Custom Post Type Permalinks を使用し、
    「カスタム分類のアーカイブのパーマリンクを変更する」にチェックを入れています。

    以下functions.phpの記述
    カスタム投稿タイプを作成

    add_action('init', 'create_new_post_type');
    function create_new_post_type(){
      $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
    	'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => 5,
        'supports' => array('title','editor','thumbnail'),
        'has_archive' => true
      );
      register_post_type('カスタム投稿名',$args);
     flush_rewrite_rules( false );
    }

    カスタムタクソノミーを作成

    $args = array(
    	'hierarchical' => true,
    	'public' => true,
    	'show_ui' => true
    );
    register_taxonomy('カスタムタクソノミー名','カスタム投稿名',$args);
    
    //カスタム投稿パーマリンクから「/taxonomy/」削除
    function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
        return str_replace('/'.$taxonomy.'/', '/', $termlink);
    }
    add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);

    また、register_taxonomyの際に
    'rewrite' => array('slug' => 'カスタム投稿名')
    を加え、flush_rewrite_rules( false );を実行すると、

    2.カスタムタクソノミーのタームのアーカイブ hogehoge.com/カスタム投稿名/ターム名/
    は表示されますが、1.と3.は404になってしまいます。

    最初に掲示した1~3を全て満たすパーマリンク構造を作成することは可能でしょうか。
    解決方法がございましたら、ご教授ください。よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    2 と 3 のURLのルールが競合しているのがお分かりでしょうか?

    /カスタム投稿名/hoge/

    にアクセスされた場合、同じルールであるため、hoge をターム名として扱うか、それとも %postname% として扱うか、WordPress自身では適切に判断できないのです。
    3が表示できていて、2が表示できていないということは、WordPressは hoge を %postname% と解釈して、該当するページがないため、404となってしまうのでしょう。

    これを回避するには、add_rewrite_ruleを用いて、設定されているタームのみタームとして解釈されるように、URLの変換ルールを追加する必要があります。
    また、設定されているタームのみ変換ルールに含ませるため、タームの追加や削除に応じて、変換ルールの更新を行う必要があります。

    URLの変換ルールについては、以前作成した資料があるので、これを確認してください。

    また、flush_rewrite_rules は重い処理であり initフックなどで毎回動作させることは良くない例として、flush_rewrite_rules の Usage に記述されていますので検討された方がよいかと思います。

    トピック投稿者 U2

    (@agechu)

    早速のご回答、ありがとうございます。
    変換ルールの資料が非常に参考になり、add_rewrite_ruleで解決することができました。

    >設定されているタームのみ変換ルールに含ませる
    ターム名に規則性をもたせ、条件に一致したタームのみ変換するようにいたしました。

    また、flush_rewrite_rulesについてもお教えいただき、ありがとうございました。
    こちらはなくても動作できましたので、利用しないようにいたします。

    今回の件で、パーマリンクの仕組みについてとても勉強になりました。
    本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「/カスタム投稿名/ターム名/とするパーマリンク設計方法」には新たに返信することはできません。