web-dev-qa-db-ja.com

カスタム投稿タイプのアーカイブURLがページのURLを引き継ぐ

カスタム投稿タイプのアーカイブに問題があります。

  • /address/にWordPressのページがあります
  • /address/post#/に表示される動的カスタム投稿を作成しました

この機能を有効にすると、/address/のWordPressページがカスタム投稿アーカイブに置き換えられます。

どうすればこれを防ぐことができますか? WordPressページをアーカイブではなく/address/に表示したいです。

2
Cyrus

投稿タイプを登録するときは、has_archive引数をfalseに設定します。変更した場合は、変更を確認するために書き換え規則をフラッシュすることを忘れないでください。

あなたが尋ねたように、アーカイブではなくページを表示したいのであれば、これでうまくいきます。ページのコンテンツとカスタム投稿のリストを表示したい場合はどうですか。

これを実現するために使用できる2つのアプローチがあります。

1 - ページテンプレートを使用する

これは私がウェブで最もよく見かけるものです。ページテンプレートを作成し、タイトルとコンテンツを表示したら、カスタムループを使用して投稿を表示します。それは仕事をします、しかし人々はかなり頻繁に適切なページ付けとめちゃくちゃになるようです。

2 - カスタム投稿のページ

これが私の望ましいアプローチです。投稿タイプを登録し、アーカイブテンプレートで使用する通常のPageを作成するときは、has_archiveを保持します。ページのスラッグはアーカイブスラッグと一致します。デフォルトでは、WPの書き換えルールはアーカイブがページを切り捨てるように順序付けされています。

私のarchive-{post_type}.phpテンプレートの始めに、私はこれを置きます:

$queried_object = get_queried_object();

$page_data = get_page_by_path( $queried_object->rewrite['slug'] );

/* no need to check our context, as we know that this 
   code will only run for our CPT archives
*/

if ( !is_single() ) {
    echo apply_filters('the_content', $page_data->post_content);
}

// process the content in the same way that the_content would within a loop

// Now go into your usual archive loop...

ご希望の場合は、ページIDを使用するか、組み込みのPage for Postsページと同等のオプションを投稿タイプに設定することもできます。

このようにすれば、もっと難しいアーカイブクエリを自分で再構築する必要がなくなります。

4

ご協力ありがとうございました。

アンディは私を正しい方向に導きました。私はただ加えなければならなかった:

flush_rewrite_rules();

再度、感謝します!

0
Cyrus