Home > wordpress

wordpress Archive

カテゴリーアーカイブの中で記事の並べ替えをしたい!

用語集なんかを作っていて、カテゴリーの中で50音順に並べたかったりすることあるじゃないですか。
そのときに

<?php query_posts('orderby=meta_value&meta_key=kana&order=ASC'); ?>

としたら、あかんかったのです。そのカテゴリーの記事だけでなくて、全部の記事が吐き出されてしまいました。

正しくは

<?php query_posts($query_string . '&orderby=meta_value&meta_key=kana&order=ASC'); ?>

とせねばならんかった模様。

カテゴリアーカイブを開いた段階で、$query_stringにすでにどのカテゴリーにいるかって情報が入っているので、それを指定しないといけなかったんですな。

  • Comments (Close): 0
  • Trackbacks (Close): 0

カテゴリ一覧を出力するときに、カテゴリに記事がない場合は表示方法を変えたい!

と思ったので色々調べてみたんだけど、どうもうまい方法が見つからない。
できればforeachでループさせて、Wordpressに自動で判別させたい!
ので、悩んだあげく以下のようにすることにした

 


<dl class="glossary-index-list">
<dt class="glossary-index-ttl"><img src="<?php bloginfo("template_directory") ?>/public/images/glossary/glossary-index.png" alt="索引"></dt>
<?php
$cat_all = get_terms("category","fields=all&get=all");
foreach($cat_all as $value):
?>
<?php
$havePosts = get_category($value->term_id)->category_count;
if($havePosts > 0):
?>
<dd class="glossary-index-item"><a href="<?php echo get_category_link($value->term_id);?>"><?php echo $value->name; ?></a></dd>
<?php else: ?>
<dd class="glossary-index-item noPost"><?php echo $value->name; ?></dd>
<?php endif; ?>
<?php endforeach; ?>
</dl>

説明は後ほど…

さて、ここで何が行われているのかという話ですわ
まず

<?php
$cat_all = get_terms(“category”,”fields=all&get=all”);
foreach($cat_all as $value):
?>

この部分。
これは、カテゴリーを全部拾ってきて一覧に出せや
という話ですね。カテゴリーのデータを全部取得して、それを$cat_allに代入しています。
ほいでforeachを使ってカテゴリーの数の分だけループさせて、指定したHTMLのフォーマットで吐き出させる。
その際に先ほどの$cat_allを$valueとしてちょうだいと言っています。(深い意味はわからんが)
ほいで、ループするときに、カテゴリーの中に記事がある場合とない場合でちがうHTMLで出力したいちゅうことです。

その部分が

<?php
$havePosts = get_category($value->term_id)->category_count;
if($havePosts > 0):
?>

これ
get_categoryで個別のカテゴリーを呼び出して、さらにcategory_countでその中の記事数を呼び出して、それを$havePostに代入しています。
ほいでifで$havePostが0より多い数だったらこれしろや!
でなかったらあれしろや!
という命令を書いています。

以上!

  • Comments (Close): 0
  • Trackbacks (Close): 0

【やっぱり】【不可解だけど】子カテゴリ名のみ表示【できたよ】【できてなかったよ】

記事のリスト表示をするときに、記事が属する子カテゴリのみ表示させたかったわけ。
カテゴリの構造は
■親カテゴリ
□子カテゴリA
□子カテゴリB
みたいな感じ。

http://web.donnatokimo.com/wordpress/327

↑こちらを参考にさせてもらって(てか丸パクリして)

<?php
$cat = get_the_category();
$cat = $cat[0];
$catName = $cat->cat_name;
$parent = get_category($cat->category_parent);
$parentCatName = $parent->cat_name;
echo $parentCatName .$catName;
?>

ってコードを書いてみるけども、親カテゴリの名前しか表示されない。

ためしに

<?php
$cat = get_the_category();
$cat = $cat[1];//←ここの数字を「0」から「1」に変更した
$catName = $cat->cat_name;
$parent = get_category($cat->category_parent);
$parentCatName = $parent->cat_name;
echo $parentCatName .$catName;
?>

としたらできた。
何故できたかわからんけど、正しく動いているからよしとする。
時間ができたらもうちょっと突っ込んで調べてみること【メモ】

 

<追記>

複数の子カテゴリを選択していた場合は、がっつり親カテゴリが表示されてしまった…
てか、もしかしたら、子カテゴリを3つ選んだりしたら、一番最初の子カテゴリ名が表示されたりするのだろうか
調べてみなあかん

  • Comments (Close): 0
  • Trackbacks (Close): 0

最新1件以外の記事をリスト

覚書。あとでちゃんと記事にする

<?php query_posts(‘category_name=seminar&offset=1‘); ?>

wp_reset_query();

サイドバーの中で条件分岐をしようとして

  1. <?php if ( is_home() ) { ?>
  2. <?php echo ‘<!– is home –>’; ?>
  3. <p>ここはトップページです</p>
  4. <?php } else { ?>
  5. <p>ここはトップページではありません</p>
  6. <?php } ?>

と書いたら、トップページ以外のページでも「ここはトップページです」と表示されてしまってうまくいかない。

ググってみたら、本家のフォーラムで対処法を発見(http://wordpress.org/support/topic/274757

  1. <?php wp_reset_query(); ?>
  2. <?php if ( is_home() ) { ?>
  3. <?php echo ‘<!– is home –>’; ?>
  4. <p>ここはトップページです</p>
  5. <?php } else { ?>
  6. <p>ここはトップページではありません</p>
  7. <?php } ?>

こう書いてうまくいった。

でも、「wp_reset_query();」って何だろう?何でこれがないとうまくいかないのか

で発見したのがこのページ

重要なのはループの前のquery_postsとループの後のwp_reset_query()
query_postsを使う場合wp_reset_query()を最後につけないとqueryの指定が後のループに引き継 がれる。

つまり、home.phpで使っていた「<?php query_posts(); >」がずっと有効になっていて、それが理由でサイドバーの方がうまく動いてくれなかったんだね。

ということで、home.phpの該当部分に「<?php wp_reset_query(); ?>」を書き加えて一件落着。

ホーム > wordpress

Search
Feeds
Meta

Return to page top