web-dev-qa-db-ja.com

is_page_templateが期待どおりに機能しない

ユーザーがどのタイプのページにいるかに基づいて、さまざまなヘッダーを提供しようとしています。これが私のコードです。

<!-- IF HOME -->
        <?php if ( is_front_page() && is_home() ) : ?>
        <?php get_template_part( 'template-parts/headers/home-header' ); ?> 

        <!-- IF TEMPLATES -->

        <?php elseif ( is_page_template('archive-mobile_photo.php') ) : ?>
        <?php get_template_part( 'template-parts/headers/home-header' ); ?> 

        <!-- IF  POST -->
        <?php else : ?>
        <?php get_template_part( 'template-parts/headers/Zine-header' ); ?>     

        <?php endif; ?>

奇妙なことに、ホームページと投稿ページは問題なく機能していますが、is_page_template()を使用したチェックは機能していません。私はクエリモニタプラグインを持っていて、ページがarchive-mobile_photo.phpテンプレートであることを確認しています。

私はかなりWordPressに不慣れです、そして、私は完全に迷っています。

1
Garrett Scafani

次の行でmobile_photo投稿タイプのアーカイブにいるかどうかを確認しているようです。

<?php elseif ( is_page_template( 'archive-mobile_photo.php' ) ) : ?>

そうであれば、代わりに is_post_type_archive( $post_types ) を使用してください。

<?php elseif ( is_post_type_archive( 'mobile_photo' ) ) : ?>
1
Dave Romsey

テンプレート部分としてヘッダーをロードするために条件を使用するよりも、各ページテンプレートに対して呼び出すときにget_header()に組み込まれた機能を使用する方が読みやすくなります。これらのファイルはテーマフォルダのルートにあります。

2つのファイルにheader-home.phpheader-Zine.phpという名前を付け、それらをページテンプレートで次のように呼び出します。

get_header('home');

そして

get_header('Zine');

もっと複雑なページに条件文が必要な場合でも、そのページをチェックして自分の基準に基づいて適切なファイルを読み込むことができます。コーデックスにも example があります。

get_header()get_template_part()の違いが何であるかはわかりませんが、それ以外の場合はもっと読みやすく、WordPressの標準に従っています。

0
Jeremy Ross