サポート » 使い方全般 » 条件分岐、is_archive()について

  • 解決済 GaogaoX

    (@gaogaox)


    ●やりたい事
    is_archive()を利用して、アーカイブページの判断を行おうとしています。

    ソースコードでは「お知らせ一覧」という文章を表示するようにしていますが、
    実際には、他の処理を加えようと考えています。
    しかし、現在はis_archive()の分岐を正しく実行できずに、
    「お知らせ一覧」すら表示できません。

    複数の投稿が表示されている場合はアーカイブページに分類され(index.php)、
    分岐にはis_archive()を利用する。

    1つの投稿が表示されている場合は投稿ぺーじに分類され(sinfle.php)、
    分岐にはis_post()を利用する。

    と言う、認識でしたが、間違っているのでしょうか?
    色々検索してみましたが、解らずじまいなので質問させていただきました。

    以下、ソースコードです。

    <?php get_header(); ?>
    <?php get_sidebar(); ?>
    
    <div id="main-contents">
    	<p>index.php</p>
    	<?php the_topicpath(); ?>
    
    	<?php
    		if (is_archive()){
    			echo ('お知らせ一覧です。');
    		}
    	?>
    
    	<?php // 投稿・アーカイブページで投稿を出力するループ ?>
    	<?php if (have_posts()) : ?>
    		<?php while (have_posts()) : the_post(); ?>
    			<?php // 記事の内容を抜粋で出力 ?>
    			<div class="entry">
    				<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    				<p class="date"><?php the_time('Y.m.d'); ?></p>
    					<div class="content">
    						<?php the_excerpt(); ?>
    					</div>
    				<p class="more"><a href="<?php the_permalink(); ?>">続きを読む</a></p>
    			</div><!--end of .entry-->
    		<?php endwhile; ?>
    
    		<?php wp_pagenavi(); ?>							<?php // ページリンク出力 ?>
    
    	<?php else: ?>
    		<p>現在表示する記事がありません。</p>
    	<?php endif; ?>
    </div><!--end of #container-->
    
    <?php get_footer(); ?>

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 GaogaoX

    (@gaogaox)

    間違えて、何度も「投稿」を押してしまいました。
    他の投稿を「解決済み」にしたので、こちらで解答をお願いします。

    申し訳ありませんでした。

    モデレーター jim912

    (@jim912)

    少し認識が異なっているかもしれません。

    is_archive が真になるのは、テンプレート階層 の概観図で「アーカイブページ」のいずれかの表示をおこなっているときになります。

    トップページで複数の投稿を表示している場合でも、このときはis_archive は偽となるため、is_home で判別する必要があります。

    トピック投稿者 GaogaoX

    (@gaogaox)

    解説ありがとうございます。

    先程のソースは、グローバルメニューからアクセスできるよう個別ページで「お知らせ」を作成し、
    過去のお知らせ一覧を日付アーカイブとしてを表示させるindex.phpの内容でした。

    WordPressダッシュボードから、
    設定>>表示設定>>固定ページ>>投稿ページ:お知らせ
    の設定も行っています。

    jim918さんの説明を見て、
    WordPressが日付アーカイブページではないと判断しているのではと、
    index.phpを複製したdate.phpを作成して試しました。

    しかし、「お知らせ」ページはindex.phpが使用されて表示されていました。
    やはり、日付アーカイブとは判断されていない様です。

    ここで、質問なのですが、WordPressが日付アーカイブと判断する基準は何なのでしょうか?
    別途、宣言文などか必要なのでしょうか?

    日付アーカイブページのサイドバーだけに、
    お知らせ一覧アーカイブなどのウェジットを表示したいので、
    is_archive()を使用した条件分岐を行いたいのです。

    モデレーター gatespace

    (@gatespace)

    設定>>表示設定>>固定ページ>>投稿ページ:お知らせ

    であれば 「お知らせ」という固定ページは is_home ですね。
    これは日付アーカイブではなく、「投稿のアーカイブ」として判断されます。

    is_home の場合、date.phpは使われません。home.phpで無ければindex.phpです。
    (jim912さんが投稿した「条件分岐タグ」のページをよく見てください)

    日付アーカイブは簡単に言えば
    ・年別アーカイブ
    ・月別アーカイブ
    ・日別アーカイブ
    の事です。

    簡単に確認するなら、アーカイブウィジェットをウィジェットエリアに入れてみてください。
    月別アーカイブのリストが表示されるはずで、そのリンク先が「月別アーカイブ」として判断されます。

    トピック投稿者 GaogaoX

    (@gaogaox)

    解説ありがとうございます。

    前回、jim912さんから説明のあった、
    「トップページで複数の投稿を表示している場合でも、このときはis_archive は偽となるため、is_home で判別する必要があります。 」
    の部分で、is_homeの事が良く分からなかったので、テンプレート階層 のページを読んだり、検索したり、実際にWordPress上で動作させながら確認しました。

    WordPressはブログのシステムから発展した物なので、
    訪問する最初のページ(トップページ・ホームのページ) = 投稿の一覧ページ
    と言う事なのですね。
    だから、is_homeで条件分岐を行う事が出来る。

    jim912さんとgatespacesさんの言われた通り、home.phpを作成すると、お知らせページはhome.phpで表示され、is_homeで条件を指定すると期待通りの動作をさせる事が出来ました。

    ダッシュボードでの設定
    設定>>表示設定>>固定ページ>>投稿ページ:お知らせ
    は、WordPressがpage.phpとhome.phpのテンプレートを使い分ける判断を行うポイントだったと言う事でしょうか。

    また、アーカイブウェジットをウェジットエリアに入れて、月別アーカイブのリスト表示も試してみました。
    date.phpのテンプレートが使用され、先程のhome.phpと同じように表示されました。
    (date.phpをコピーした物がhome.phpなので同じように表示されるのはあたりまえかも知れませんが…)

    urlを確認すると、お知らせページへのurl
    http://********.com/*****/news/
    となっており、6月アーカイブへのurlは
    http://********.com/*****/news/date/2013/06/
    となっていました。
    このurlが、home.phpとdate.phpを判断しているのですね。

    この、date.phpを使用すさせる為のテンプレートタグがwp_get_archives()。
    そして、このdate.phpで表示されたページの判断が、is_archiveと言う認識で合っていますか?

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「条件分岐、is_archive()について」には新たに返信することはできません。