サポート » 使い方全般 » シングルページだと表示されない

  • 解決済 honeycreate

    (@honeycreate)


    お世話になっております。

    アーカイブページで表示している記事リストを
    同じようにシングルページでも表示させようと思いましたが
    うまく表示がされません。
    コードを配置しますのでご教授頂けると幸いです。

    症状としましては、
    親カテゴリ子カテゴリの振り分けが出来ないのと、
    現在のカテゴリのみの記事一覧になるところが、
    全カテゴリの記事が表示されてしまいます。

    どうぞよろしくお願いいたします。

    ※先ほどタイトル無しで投稿してしまいましたので再投稿させていただきました。

    <?php if(is_category('xxx')||$cat_parent_id == 1): ?>
    	<?php
        	$cat_id = get_query_var('cat');
    		$cat = get_category($cat_id);
    		$cat_parent_id = $cat->category_parent;
    		$cat_parent = get_category($cat_parent_id);
    		if( $cat_parent_id == 0 ): //親カテゴリの場合
    			$cat_parent = get_category($cat_parent_id);
    	?>
    		<h2>最新記事</h2>
    	<?php else: //子カテゴリの場合 ?>
    		<h2>最新記事</h2>
    		<p>カテゴリー:<a href="<?php echo get_category_link($cat_id); ?>"><?php single_cat_title(); ?></a></p>
    	<?php endif; ?>
    	<ul>
    	<?php
    		query_posts('cat='.$cat_id);
    		if (have_posts()) : while (have_posts()) : the_post();
    	?>
    		<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endwhile; endif; ?>
    		<li class="sMore"><a href="<?php echo get_category_link($cat_id); ?>">><?php single_cat_title(); ?>一覧へ</a></li>
    	</ul>
    <?php endif; ?>
    
    <?php if(is_single()): ?>
    	<?php
        	$cat_id = get_query_var('cat');
    		$cat = get_category($cat_id);
    		$cat_parent_id = $cat->category_parent;
    		$cat_parent = get_category($cat_parent_id);
    		if( $cat_parent_id == 0 ): //親カテゴリの場合
    			$cat_parent = get_category($cat_parent_id);
    	?>
    		<h2>最新記事</h2>
    	<?php else: //子カテゴリの場合 ?>
    		<h2>最新記事</h2>
    		<p>カテゴリー:<a href="<?php echo get_category_link($cat_id); ?>"><?php single_cat_title(); ?></a></p>
    	<?php endif; ?>
    	<ul>
    	<?php
    		query_posts('cat='.$cat_id);
    		if (have_posts()) : while (have_posts()) : the_post();
    	?>
    		<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endwhile; endif; ?>
    		<li class="sMore"><a href="<?php echo get_category_link($cat_id); ?>">><?php single_cat_title(); ?>一覧へ</a></li>
    	</ul>
    <?php endif; ?>
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    アーカイブと個別記事の話が両方絡んでくるので整理させてください。
    やろうとしていることがこちらでちゃんと把握できてないと、誤った回答をしてしまう恐れがあるので。

    1. そもそもアーカイブでの表示はうまくいっていますか?

    アーカイブページで表示している記事リストを
    同じようにシングルページでも表示させようと思いましたが
    うまく表示がされません。

    とありますが、アーカイブページの表示自体がアヤシイはずです。

    1行目に$cat_parent_id == 1という処理が出てきていますが、$cat_parent_idという変数はそれよりも下で定義されているため、1行目のこの記述は機能していません。

    それに、カテゴリーアーカイブにquery_posts('cat='.$cat_id);は不要だと思います。

    2. お使いのテーマは何ですか?

    single.phpとか、archive.phpがあるか、category.phpがあるかなど、ファイル構成によってやるべきことは変わってくるので、もれなく教えてください。

    ———-

    get_categoryはアーカイブページでしか使えない関数です。
    if(is_single())以下の記述は誤っています。

    そもそもアーカイブの処理と個別記事ページの処理を1枚のファイルでやるというところに無理があると思います。

    もともとのコードをガッツリ修正しないといけないと思いますが、道のりが長そうなのでまずは1, 2を確認してください。

    スレッド開始 honeycreate

    (@honeycreate)

    ご回答頂きありがとうございます。
    説明不足で申し訳ございませんでした。
    テーマは自作のものになります。

    またコードの記述もれがあり
    先ほどのコードの前に以下のコードがありました。

    <?php
    	$cat_id = get_query_var('cat');
    	$cat = get_category($cat_id);
    	$cat_parent_id = $cat->category_parent;
    	$cat_parent = get_category($cat_parent_id);
    ?>

    また今回このコードが入っているファイルが
    サイドバー(sideber.php)になります。
    single.php、archive.php ともにこのsideber.phpを読み込んでおります。

    ただシングルとアーカイブを変えたらいいと思い込んでおりました。
    先ほどのif(is_single())以下に
    下のコードを差し替えたらなんとかうまくいきそうです。

    <?php
    			$cat = get_the_category();
    			$cat = $cat[0];
    			$cat_ID = $cat->cat_ID;
    		 ?>
    		<?php
    			if( $cat_ID == 0 ): //親カテゴリの場合
    				$cat_parent = get_category($cat_ID);
    		?>

    これからすぐに検証が難しくまだちゃんと確認はできていないのですが、
    できましたらまた後ほどご報告させていただきます。

    もし他にも何かアドバイスがあればご指摘頂けると幸いです。

    どうぞよろしくお願いします。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    >honeycreateさん

    先ほどのif(is_single())以下に
    下のコードを差し替えたらなんとかうまくいきそうです。

    get_the_categoryを使うことは正解です!
    ただ、

    今回このコードが入っているファイルが
    サイドバー(sideber.php)になります。

    ということなので、サイドバーに表示した記事リスト以外に、メインの投稿は表示されているんですよね?
    となると、query_postsを使った上記コードは厳密に言えば誤りとなります。

    自分の記事で恐縮ですが、こちらの記事を参考に、get_postsを使った記述に直されることをおすすめします。

    <?php
    		query_posts('cat='.$cat_id);
    		if (have_posts()) : while (have_posts()) : the_post();
    	?>

    の代わりに

    <?php
       $newslist = get_posts( array(
        'category_name' => $cat_ID
      ));
        foreach( $newslist as $post ):
        setup_postdata( $post );
    ?>

    という感じにします。(パラメータはは適宜追加してください。ループの終わりをendforeach;に変えるのも忘れずに)

    それと、

    先ほどのコードの前に以下のコードがありました。

    <?php
    	$cat_id = get_query_var('cat');
    	$cat = get_category($cat_id);
    	$cat_parent_id = $cat->category_parent;
    	$cat_parent = get_category($cat_parent_id);
    ?>

    とのことですが、コレが最初に書いてあるなら

    <?php if(is_category('xxx')||$cat_parent_id == 1): ?>
    	<?php
        	$cat_id = get_query_var('cat');
    		$cat = get_category($cat_id);
    		$cat_parent_id = $cat->category_parent;
    		$cat_parent = get_category($cat_parent_id);
    		if( $cat_parent_id == 0 ): //親カテゴリの場合
    			$cat_parent = get_category($cat_parent_id);
    	?>

    この部分は、

    <?php if(is_category('xxx')||$cat_parent_id == 1):
    		if( $cat_parent_id == 0 ): //親カテゴリの場合
    			$cat_parent = get_category($cat_parent_id); ?>

    これだけでいいです。同じことを2回書く必要はありません。

    とりあえず方向性としてはいい感じだと思うので、もうひといきがんばりましょう!

    スレッド開始 honeycreate

    (@honeycreate)

    >mypacecreatorさん

    お世話になります。
    ありがとうございます。

    頂いたコードを参考に再構築してみました。

    <?php
        $cat_id = get_query_var('cat');
    	$cat = get_category($cat_id);
    	$cat_parent_id = $cat->category_parent;
    	$cat_parent = get_category($cat_parent_id);
    ?>
    
    <?php if(is_category('xxx')||$cat_parent_id == 1):
    	if( $cat_parent_id == 0 ): //親カテゴリの場合
    ?>
    		<h2>最新記事一覧</h2>
    	<?php else: //子カテゴリの場合 ?>
    		<h2>最新記事一覧</h2>
    		<p>カテゴリー:<a href="<?php echo get_category_link($cat_id); ?>"><?php single_cat_title(); ?></a></p>
    	<?php endif; ?>
         <ul>
    	<?php
    		$newslist = get_posts( array(
        	'category_name' => $cat_ID
    		));
        	foreach( $newslist as $post ):
        	setup_postdata( $post );
    	?>
    		<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endforeach; ?>
    		<li class="sMore"><a href="<?php echo get_category_link($cat_id); ?>">><?php single_cat_title(); ?>一覧へ</a></li>
    	</ul>
    <?php endif; ?>
    
    <?php if(is_single()):
    	$cat_s = get_the_category();
    	$cat_s = $cat_s[0];
    	$cat_s_id = $cat_s->cat_ID;
    	if( $cat_s_id == 0 ): //親カテゴリの場合
    	?>
    		<h2>最新記事一覧</h2>
    	<?php else: //子カテゴリの場合 ?>
    		<h2>最新記事一覧</h2>
    		<p>カテゴリー:<a href="<?php echo get_category_link($cat_s); ?>"><?php echo get_cat_name($cat_s_id); ?></a></p>
    	<?php endif; ?>
        <ul>
    	<?php
    		$newslist = get_posts( array(
        	'category_name' => $cat_ID
    		));
    		foreach( $newslist as $post ):
    		setup_postdata( $post );
    	?>
    		<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endforeach; ?>
    		<li class="sMore"><a href="<?php echo get_category_link($cat_s_id); ?>">><?php echo get_cat_name($cat_s_id); ?>一覧へ</a></li>
    	</ul>
    <?php endif; ?>

    get_postsを使った記述に変更してみました。
    表示が出来ましたがアーカイブ、シングルともに全カテゴリで表示されてしまいます。

    ‘category_name’ => $cat_ID

    ↑この部分を変更するのかなと思い

    アーカイブは
    ‘category_name’ => $cat_id

    シングルは
    ‘category_name’ => $cat_s

    にしてみましたが、
    そうすると表示されなくなってしまいます。。。
    他$cat、$cat_s_id等も試してみましたが出来ませんでした。。

    あと少しかと思いますが、、
    アドバイス頂けると幸いです。

    どうぞよろしくお願いいたします。

    スレッド開始 honeycreate

    (@honeycreate)

    お世話になります。

    >mypacecreatorさんのブログをよく見直し

    ‘category_name’を’cat’に変更したらうまくいきました!

    アーカイブは
    ‘cat’ => $cat_id

    シングルは
    ‘cat’ => $cat_s_id

    としたところ正常にそのカテゴリだけ表示されました。

    大変勉強になりました。
    ありがとうございました。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    category_name’を’cat’に変更したらうまくいきました!

    すみません、その通りです。
    あの部分は私のミスでしたm(_ _)m

    ‘cat’ は、カテゴリーをID番号で、
    ‘category_name’はカテゴリースラッグで指定しますので。

    なにはともあれ、できたようでよかったです。
    OKならスレッドを「解決済み」にしておいてくださいね~

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「シングルページだと表示されない」には新たに返信することはできません。