web-dev-qa-db-ja.com

WordPressはテンプレートページの代わりにアーカイブページを取得し続けます

テンプレートを設定し、WordPressでページを作成し、ドロップダウンから対応するテンプレートを選択しました。このサイトのいくつかのページ用のテンプレートを作成しましたが、それらはすべてうまく機能しています。しかし、この1つのテンプレートは問題を引き起こしています。 WordPressは何らかの理由でアーカイブページを取得し続けます。正確なボディクラスはこれです:archive post-type-archive post-type-archive-teams logged-in

これが私が作成したテンプレートです。

        <?php get_header();?>

            <section id="content">

                <?php
                    $temp = $wp_query;
                    $wp_query = null;
                    $wp_query = new WP_Query();
                    $wp_query->query('post_type=teams&posts_per_page=7');

                    while ( $wp_query->have_posts() ) : $wp_query->the_post();

                ?>

                <article class="post team" id="post-<?php the_ID(); ?>">
                    <h2><?php the_title(); ?></h2>
                    <section class="entry">
                                      content here
                    </section>
                </article>

                <?php
                    endwhile; 
                    $wp_query = null;
                    $wp_query = $temp;
                    wp_reset_query();
                ?>
            </section>

        <?php get_sidebar(); ?>

        <?php get_footer(); ?>

誰かがこれがうまくいかない理由を理解するのを手伝ってくれる?

4
SamY

私の問題はresearchpage-research.phpを使わずにarchive.phpを使っていたことです

私はそれを解決したのではなく、「静的ページとカスタム投稿タイプは同じスラッグを持つことができない」という解決策ではなく、ダッシュボードの「設定」 - >「パーマリンク」で解決した。

それは "日と名前"にあり、私はそれを "Numeric"に変更し、研究ページをpage-research.phpからロードしました

2
Bruce Robinson

これに対する最も基本的なアプローチは私がすることをすることです:テンプレートページを構築するとき、私はそれらの前に "template_"を置きます。

したがって、もしあなたがページのためにteam.phpテンプレートが欲しいなら、あなたはtemplate_team.phpを探すでしょう。

また、実際には必要のないコードがページにあります。

私はあなたのコードを単に以下のように変更します。

 <?php get_header();?>

        <section id="content">

            <?php
                $wp_query = new WP_Query();
                $wp_query->query('post_type=teams&posts_per_page=7');

                while ( $wp_query->have_posts() ) : $wp_query->the_post();

            ?>

            <article class="post team" id="post-<?php the_ID(); ?>">
                <h2><?php the_title(); ?></h2>
                <section class="entry">
                                  content here
                </section>
            </article>

            <?php
                endwhile; 
                wp_reset_query();
            ?>
        </section>

    <?php get_sidebar(); ?>

    <?php get_footer(); ?>

そして私が変更を加える理由はあなたが実際に$ tempを使っていないのでそれを割り当てる理由がないからです。さらに、ページがロードされたときにwp_queryへの参照がないため、ページ内のどこにも使用していません。

(NEWキーワードを使用して)まったく新しいクエリをインスタンス化し、ページに関する限り、それがページ上にある唯一のクエリです。したがって、それがリセットする必要がある唯一のクエリです。


実際に起こっていることはあなたがリンクをクリックすることであり、そしてそれはページ「チーム」にあなたを導く。これは "template_teams.php"をロードし、ページがロードされるとすぐにそのページの$ postに割り当てられたすべての変数を持ちます。 $ post内には、WordPressテキストエディタで作成してテンプレートを割り当てたページの実際のコンテンツがあります。

ページにロードされているデフォルトのクエリの上に別のクエリが必要な場合は、$ wp_queryの変数を必要なものに関連したものに簡単に変更できます。

$custom_query_1 = new WP_Query();
$custom_query_1->query('post_type=teams&posts_per_page=7');

そうすれば、いつでもページ内の任意の場所でデフォルトのクエリとカスタムクエリを使用できます。クリーンアップ関数wp_reset_query()を使用することは、各ループ後に使用するのに理想的ですが、BUTがすべてのクエリをクリアします。

これを回避してカスタムクエリを消去しないようにするには、新しいクエリを必要な場所にだけ配置します。

1
Neil Davidson