アーカイブと個別記事の話が両方絡んでくるので整理させてください。
やろうとしていることがこちらでちゃんと把握できてないと、誤った回答をしてしまう恐れがあるので。
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を確認してください。
ご回答頂きありがとうございます。
説明不足で申し訳ございませんでした。
テーマは自作のものになります。
またコードの記述もれがあり
先ほどのコードの前に以下のコードがありました。
<?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);
?>
これからすぐに検証が難しくまだちゃんと確認はできていないのですが、
できましたらまた後ほどご報告させていただきます。
もし他にも何かアドバイスがあればご指摘頂けると幸いです。
どうぞよろしくお願いします。
>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回書く必要はありません。
とりあえず方向性としてはいい感じだと思うので、もうひといきがんばりましょう!
>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等も試してみましたが出来ませんでした。。
あと少しかと思いますが、、
アドバイス頂けると幸いです。
どうぞよろしくお願いいたします。
お世話になります。
>mypacecreatorさんのブログをよく見直し
‘category_name’を’cat’に変更したらうまくいきました!
アーカイブは
‘cat’ => $cat_id
シングルは
‘cat’ => $cat_s_id
としたところ正常にそのカテゴリだけ表示されました。
大変勉強になりました。
ありがとうございました。
category_name’を’cat’に変更したらうまくいきました!
すみません、その通りです。
あの部分は私のミスでしたm(_ _)m
‘cat’ は、カテゴリーをID番号で、
‘category_name’はカテゴリースラッグで指定しますので。
なにはともあれ、できたようでよかったです。
OKならスレッドを「解決済み」にしておいてくださいね~