サポート » 使い方全般 » taxonomy.phpの記事が表示されないのはなぜ?

  • 解決済 fukui

    (@fukui)


    ○質問の主旨

    下記のコードでtaxonomy.phpを記述していますが、
    <!– コンテンツ –><div id=”content”>~</div>の間の記述が全く反映されず、
    カスタム投稿で分類したカテゴリーが表示されません。
    これはなぜでしょうか?詳しい方がいらっしゃいましたら、
    ご教示願います。

    関連質問:カスタム分類とquert_posts()の引数について

    ○質問の補足

    <!– コンテンツ –><div id=”content”>~</div>の間の記述は
    全く反映されていないにも関わらず、
    <!– サイドバー –><div id=”sidebar”>~</div>の記述は
    そのまま反映されています。

    ○コード1(taxonomy.php)

    <?php get_header(); ?>
    <div>
    <?php $terminfo = get_term_by(‘slug’, $term, $taxonomy); ?>
    </div>

    <!-- コンテンツ -->
    <div id="content">
    <p class="title"><?php echo $terminfo->name; ?></p>
    
    <?php query_posts('posts_per_page=2&order=DESC&' . $query_string); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    	<div class="post">
    	<h2><?php the_title(); ?></h2>
    	<?php the_content(); ?>
    </div>
    <?php endwhile; endif; ?>
    
    <?php get_template_part('pagenation'); ?>
    </div>
    
    <!-- サイドバー -->
    <div id="sidebar">
    <ul>
    <li class = "widget"><h2>ニュースのカテゴリー</h2>
    <ul>
    <?php $myterms = get_terms('newscat'); ?>
    <?php foreach ($myterms as $myterm): ?>
    <li>
    <a href="<?php echo get_term_link($myterm->slug, 'newscat'); ?>"><?php echo $myterm->name; ?></a>
    </li>
    <?php endforeach;?>
    </ul>
    </li>
    <li class="widget">
    <h2>最近のニュース</h2>
    <ul>
    <?php query_posts('post_type=news&posts_per_page=5'); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php get_template_part('content','title'); ?>
    <?php endwhile; endif; ?>
    </ul>
    </li>
    </ul>
    </div>
    <?php get_footer(); ?>

    ○コード2(functions.phpの一部)

    // ニュース記事の投稿タイプ
    register_post_type(
    	'news',
    	array(
    		'label' => 'ニュース',
    		'hierarchical' => false,
    		'public' => true,
    		'has_archive' => true,
    		'supports' => array(
    			'title',
    			'editor'
    		),
    		'exclude_from_search' => true
    	)
    );
    
    // ニュース記事を分類するカスタムタクソノミー
    register_taxonomy(
    	'newscat',
    	'news',
    	array(
    		'label' =>'ニュースのカテゴリー',
    		'hierarchical' => true,
    	)
    );
7件の返信を表示中 - 1 - 7件目 (全7件中)
  • <!– コンテンツ –><div id=”content”>~</div>の間の記述が全く反映されず、
    カスタム投稿で分類したカテゴリーが表示されません。

    全く反映されず、というのがどういう状態なのかが読み取れません。

    ・<div class=”post”>~</div>が全く表示されない
    ・表示されているけれどquery_posts()の指定が効いていない

    どちらでしょうか?もしくは、この他の状態なのでしょうか・・・?
    そして、どういう状態であれば正しく表示できている事になりますか?

    ※また、query_posts()を使うのであれば、ループの後でwp_reset_query()を入れる必要があります。Codexも確認してみてください。

    query_posts
    wp_reset_query

    トピック投稿者 fukui

    (@fukui)

    mel_chaさま
    早速のご回答ありがとうございます。

    全く反映されず、というのがどういう状態なのかが読み取れません。

    「全く反映されず」というのは、
    2つの状態のことを指します。

    1.<?php the_title(); ?>や<?php the_content(); ?>を
    記述しているにも関わらず、タイトルや記事が表示されない。
    (カテゴリーに関する投稿はすでにいくつかして、分類もしています)

    2.<?php the_title(); ?>や<?php the_content(); ?>
    が出ていないせいか、query_postsに関するループ処理も
    なされていない。

    要するに
    <!– コンテンツ –><div id=”content”>~</div>の部分が、
    「ほぼ真っ白」ということです。

    「ほぼ」とつけたのは、

    <p class="title"><?php echo $terminfo->name; ?></p>

    の部分だけは、表示されていて、個別記事の見出しや内容は、
    何も表示されないということです。

    ループの後でwp_reset_query()を入れる必要があります。

    ご指摘ありがとうございます。

    <p class=”title”><?php echo $terminfo->name; ?></p>

    の部分だけは、表示されていて、個別記事の見出しや内容は、
    何も表示されないということです。

    この記述の下は何も出ない、ということでしょうか?
    HTMLソースの方はどうなっていますでしょうか?
    </html>(get_footer()の中身)まで完全に表示されていますか?

    また、念のためですが、

    <?php $terminfo = get_term_by('slug', $term, $taxonomy); ?>

    この部分の$termと$taxonomyの変数は何を入れられていますか?
    もし$terminfoがタクソノミーのタイトルを出すためだけのものなら、
    これを使わずにsingle_term_titleを使えばよいかと思います。

    single_term_title

    トピック投稿者 fukui

    (@fukui)

    mel_chaさま
    たびたびのご回答ありがとうございます。

    $termと$taxonomyの変数は何を入れられていますか?
    もし$terminfoがタクソノミーのタイトルを出すためだけのものなら、
    これを使わずにsingle_term_titleを使えばよいかと思います。

    変数は使ってません。
    single_term_titleを使うと、

    <?php $terminfo = get_term_by('slug', $term, $taxonomy); ?>

    のときと同様の表示ができますので、こちらを使うようにします。

    HTMLソースの方はどうなっていますでしょうか?

    single_term_titleなどを修正したtaxonomy.phpの
    現状は、以下の通りです。

    ●表示されている部分
    ・<?php get_header(); ?>の部分
    ・<!– サイドバー –><div id=”sidebar”></div>の部分
    ・<?php get_footer(); ?>の部分

    ●表示されていない部分
    ・<!– コンテンツ –><div id=”content”></div>の部分

    <!– コンテンツ –>

    <?php get_header(); ?>
    <!-- コンテンツ -->
    <div id="content">
    <p class="title"><?php single_term_title(); ?></p>
    
    <?php query_posts('posts_per_page=2&order=DESC&' . $query_string); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    	<div class="post">
    	<h2><?php the_title(); ?></h2>
    	<?php the_content(); ?>
    </div>
    <?php endwhile; endif; ?>
    
    <?php get_template_part('pagenation'); ?>
    </div>
    
    <!-- サイドバー -->
    <div id="sidebar">
    	<ul>
    		<li class = "widget"><h2>ニュースのカテゴリー</h2>
    			<ul>
    				<?php $myterms = get_terms('newscat'); ?>
    				<?php foreach ($myterms as $myterm): ?>
    				<li>
    					<a href="<?php echo get_term_link($myterm->slug, 'newscat'); ?>"><?php echo $myterm->name; ?></a>
    				</li>
    				<?php endforeach;?>
    			</ul>
    		</li>
    		<li class="widget">
    			<h2>最近のニュース</h2>
    				<ul>
    					<?php query_posts('post_type=news&posts_per_page=5'); ?>
    						<?php if(have_posts()): while(have_posts()): the_post(); ?>
    							<?php get_template_part('content','title'); ?>
    						<?php endwhile; endif; ?>
    				</ul>
    		</li>
    	</ul>
    </div>
    <?php get_footer(); ?>

    ※ブラウザで表示されている、taxonomy.phpの画面を
    右クリックし「ページのソースを表示」させると、
    次のようになります。<?php the_title(); ?>や
    <?php the_content(); ?>に該当するソースが、
    欠けているような感じです。

    <!-- コンテンツ -->
    <div id="content">
    <p class="title">コンテンツの更新</p>
    <p class="pagenation pagenum">
    
    </p></div>

    書かれているソースをローカルで実行してみましたが、私の環境ではquery_posts()含め、きちんと取れましたね・・・。
    となると、何かプラグイン、もしくはfunctions.phpなどで独自に書かれている何かが影響しているかもしれません。

    問題解決のためのチェックリストは試されましたか?まだなら、こちらを一度試してみてください。

    ごめんなさい!上記の内容、カテゴリーでやると

    <?php query_posts('posts_per_page=2&order=DESC&' . $query_string); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    	<div class="post">
    	<h2><?php the_title(); ?></h2>
    	<?php the_content(); ?>
    </div>
    <?php endwhile; endif; ?>

    この内容が取得できた、というだけでした。
    投稿タイプとタクソノミーを作成してやってみると、確かにその部分がとれていませんでした。
    そういえば私も以前タクソノミーできちんと取れなかったことがあったのですが、

    <?php query_posts('post_type=news&posts_per_page=2&order=DESC&' . $query_string); ?>

    これでやってみてください。
    どうも投稿タイプと紐づいていないようなので、これで表示させることができました。

    トピック投稿者 fukui

    (@fukui)

    ありがとうございます!

    <?php query_posts(‘post_type=news&posts_per_page=2&order=DESC&’ . $query_string); ?>

    query_postsに”post_type=news”を加えると
    <?php the_title(); ?>や
    <?php the_content(); ?>と、
    紐づいて、それぞれの内容が表示されるようになりました。

    アドバイス大変助かりました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「taxonomy.phpの記事が表示されないのはなぜ?」には新たに返信することはできません。