カスタム投稿タイプ、カスタム分類法、および分類法用語のパーマリンクURL構造をカスタマイズするトピックを扱っている投稿がいくつかあることを私はよく知っています。しかし、それらのどれもが本当にはっきりしていない、正しく動作しない、または他の場所で問題を引き起こすことはありません。
ここにいくつかのリンクがあり、それらはすでに「種類の」cover URL rewritingです。
次の行に沿ってパーマリンクURL構造を作成しようとしています。
理想的なパーマリンク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();
}
それが可能かどうかはわかりませんが、おそらく最善のアプローチではないかもしれません。ここに私の推論があります:
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つの理由があると思います。
複数の分類用語の可能性(カスタム投稿タイプまたは任意の投稿に添付された複数の分類は言うまでもありません)は、多くの重複リンクを作成し、ブックマークを破る可能性が高くなります-/cars/dealers/honda/123-hot-rod
をブックマークするとしましょうそれは実際にはホンダではなく、トヨタであることに気づきます-投稿に関連する税条件を変更すると、そのリンクが壊れます。起こりそうな出来事ではありませんが、可能です。
率直に言って、ユーザーフレンドリーではありません。平均的なユーザーが自分の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に投稿
答えとしてこれを提出したくありません、しかしそれはあなたの分類法と用語を結び付ける驚くべき小さな断片です。
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;
}
乾杯!