web-dev-qa-db-ja.com

カスタム投稿タイプがページ名と同じスラッグであるため、競合が発生しています

カスタム投稿タイプをすべて設定しました。スラッグをページ名と同じにしたいのですが、これらのCPTのすべてがその特定のページ(/ team-members)で照会されるためです。

Custom Post TypeスラッグをページのURLに設定した場合、その特定のページはページテンプレートをロードしなくなります。壊れた投稿テンプレートを読み込みます。

私のカスタム投稿タイプを書き換えます。

$rewrite = array(
    'slug'                  => 'team-members',
    'with_front'            => false,
    'pages'                 => false,
    'feeds'                 => false,
);

これにより、 適切なURL of: http://www.example.org/team-members/bob-jones を生成できます。

今問題は私がページにアクセスしようとするときです: http://www.example.org/team-members/ 、それは正しいページテンプレートファイル(適切にはpage-team-members.phpというタイトルの)をレンダリングしません。パーマリンクの設定を保存してもうまくいきませんでした。

私のカスタム投稿タイプのURLスラッグを作成して、まったく同じものというタイトルのページに干渉しないようにするにはどうすればよいですか。

2
Joe

http://www.example.org/team-members/ に表示されるのは、あなたの投稿タイプの '投稿タイプアーカイブ'です。それはWordPressによって作成された投稿の自動的に生成されたリストです。投稿タイプにアーカイブを作成したくない場合は、has_archive引数をfalseに設定することでアーカイブを無効にできます。

register_post_type( 'post_type_name', array(
    'has_archive' => false,
) );

これで、競合することなく/ team-membersにページを作成できます。

2
Jacob Peattie

この種の衝突を避ける最も簡単な方法は、URLに追加の手順を追加して、CPT投稿をページから切り離すことです。

たとえば、URLが'slug' => 'team-members',になるように'slug' => 'team-members/member',http://www.example.org/team-members/member/bob-jonesに変更します。

確かに、それは理想的ではありません、そして、私はむしろURLがよりきれいであることを望みます、しかし時々あなたは簡単な生活のために妥協しなければなりません:-)

1
Peter HvD