web-dev-qa-db-ja.com

カスタム投稿タイプと分類法または用語のURL構造を変更する方法

カスタム投稿タイプカスタム分類法、および分類法用語パーマリンクURL構造をカスタマイズするトピックを扱っている投稿がいくつかあることを私はよく知っています。しかし、それらのどれもが本当にはっきりしていない、正しく動作しない、または他の場所で問題を引き起こすことはありません。


ここにいくつかのリンクがあり、それらはすでに「種類の」cover URL rewritingです。

  1. カスタム分類法とカスタム投稿タイプ(基本名/親税/子税/カスタム投稿タイプ名)を使用してパーマリンク構造を作成する方法
  2. カスタム投稿の種類、分類法、およびパーマリンク
  3. カスタム投稿タイプと分類法書き換え構造を混在させる

次の行に沿ってパーマリンクURL構造を作成しようとしています。

  • 投稿タイプ名:cars
  • 分類名:ディーラー
  • 学名:ホンダ
  • 役職:123 Hot Rod Lane

理想的なパーマリンクURL構造の設定例:

汎用パーマリンク構造:

domain.com/post-type-name/taxonomy-name/term-name/post-title/

より具体的なパーマリンク構造:

domain.com/cars/dealers/honda/123-hot-rod-lane/

  • /cars/は、投稿タイプで作成されたすべての投稿のアーカイブリストとしてアクセス可能である必要があります。
  • /cars/dealers/は、分類法で作成されたすべての投稿のアーカイブリストとしてアクセス可能である必要があります。
  • /cars/dealers/honda/は、その分類用語で作成されたすべての投稿のアーカイブリストとしてアクセス可能である必要があります。
  • /cars/dealers/honda/123-hot-rod-lane/は、carsカスタム投稿タイプで作成された投稿の特異ビューとしてアクセス可能である必要があります。

明確にするために、この質問に答えている間、誰も不必要な仕事をしないでください。投稿タイプ、分類法、用語に正しい書き換え規則を追加する以外に必要なものはありません。この質問はpermalink URLの書き換えに関するもので、投稿やアーカイブの一覧表示に関するものではありません。 is_post_type_archive() または is_tax() または is_singular() などの条件付き呼び出しを使用しながら、WordPressがそれらを正しく認識していることを確認する必要があります。

私はこのサイトの多数の質問/回答から何度も試みました。何もうまくいかないようです。

これが私の登録カスタム投稿タイプと登録カスタム分類です。

    public function register_custom_data(){
        /* Register a post type for Cars. */
        $labels = array(
            'name' => _x('Cars', 'post type general name'),
            'singular_name' => _x('Car', 'post type singular name'),
            'add_new' => _x('Add New Car', 'Car'),
            'add_new_item' => __('Add New Car'),
            'edit_item' => __('Edit Car'),
            'new_item' => __('New Car'),
            'all_items' => __('All Cars'),
            'view_item' => __('View Car'),
            'search_items' => __('Search Cars'),
            'not_found' =>  __('No Cars found'),
            'not_found_in_trash' => __('No Cars found in Trash'), 
            'parent_item_colon' => '',
            'menu_name' => __('Cars')
        );
        $args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true, 
            'show_in_menu' => false, 
            'show_in_nav_menus' => false,
            'can_export' => true,
            'query_var' => true,
            'rewrite' => true,
            'menu_icon' => NULL,
            'capability_type' => 'post',
            'has_archive' => true, 
            'hierarchical' => false,
            'menu_position' => NULL,
            'supports' => array(
                'title', 
                'editor', 
                'thumbnail' 
            ),
            'rewrite' => array(
                'slug' => 'cars', 
                'with_front' => true
            )
        ); 
        register_post_type('mbe_cars', $args);

        /* Car Dealers */
        $labels = array(
            'name' => _x('Dealers', 'taxonomy general name'),
            'singular_name' => _x('Dealer', 'taxonomy singular name'),
            'search_items' =>  __('Search Dealers'),
            'all_items' => __('All Dealers'),
            'parent_item' => __('Parent Dealer'),
            'parent_item_colon' => __('Parent Dealer:'),
            'edit_item' => __('Edit Dealer'), 
            'update_item' => __('Update Dealer'),
            'add_new_item' => __('Add New Dealer'),
            'new_item_name' => __('New Dealer Name'),
            'menu_name' => __('Dealers')
        ); 

        $args = array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array(
                'slug' => 'dealers',
                'hierarchical' => true
            )
        );

        register_taxonomy('mbe_car_dealers', 'mbe_cars', $args);

        /* Update urls. */
        flush_rewrite_rules();
    }
4
Michael Ecklund

それが可能かどうかはわかりませんが、おそらく最善のアプローチではないかもしれません。ここに私の推論があります:

domain.com/post-type-name/taxonomy-name/term-name/post-title/

投稿は複数の用語に添付できるため、本質的には同じ投稿への複数のリンクが存在する可能性があります。

domain.com/post-type-name/taxonomy-name/term-name/post-title/
domain.com/post-type-name/taxonomy-name/term2-name/post-title/
domain.com/post-type-name/taxonomy2-name/term3-name/post-title/
domain.com/post-type-name/post-title/

どうやってそこに着いたかによります。

間違いなくdomain.com/post-type-name/taxonomy-name/term-name/を使用できますが、WordPress内でこのような長いURIを使用することは完全には意味をなさないと思います。

これには2つの理由があると思います。

  1. 複数の分類用語の可能性(カスタム投稿タイプまたは任意の投稿に添付された複数の分類は言うまでもありません)は、多くの重複リンクを作成し、ブックマークを破る可能性が高くなります-/cars/dealers/honda/123-hot-rodをブックマークするとしましょうそれは実際にはホンダではなく、トヨタであることに気づきます-投稿に関連する税条件を変更すると、そのリンクが壊れます。起こりそうな出来事ではありませんが、可能です。

  2. 率直に言って、ユーザーフレンドリーではありません。平均的なユーザーが自分のWebパスに注意を払うわけではありませんが、domain.com/cars/93-saturn-ionを覚える(または理解する)よりも、domain.com/cars/dealers/wonderland-auto/93-saturn-ionを覚える方が簡単です。

その単一の投稿のページにいる場合、ほとんどのテーマのデフォルトの「above_nav」には、いずれにしてもページタイトルの下に日付を持つ分類用語が含まれているので、情報はより読みやすく、使いやすい方法でそこにあります。

例:

123ホットロッド

2012年11月2日にWonderland Used Carsに投稿

3
Eric Holmes

答えとしてこれを提出したくありません、しかしそれはあなたの分類法と用語を結び付ける驚くべき小さな断片です。

add_filter('request', 'add_tags_and_categories');  
  function add_tags_and_categories($q) {
    if (isset($q['your_term_or_tax']) || isset($q['category_name'])) {
    $q['post_type'] = 'your_custom_post';   
      return $q;
  }  
return $q;
}

これがあなたの答えへの旅に役立つことを願っています。私はよく私のカスタム投稿タイプを/ tags /&/ category /ビルトインにリンクするのに使います。

add_filter('request', 'add_tags_and_categories');  
 function add_tags_and_categories($q) {
   if (isset($q['tag']) || isset($q['category_name'])) {
     $q['post_type'] = get_post_types();

            return $q;
   }

 return $q;
}

乾杯!

2
David