小人の靴やがやってきたっ

訳の分からないタイトルですが内容はいたって真面目です。。

かなり前につくらせて頂いたWordPressのサイトがあって、
ちょっと変更して欲しいという依頼がきました。

カスタム投稿タイプで作った記事をページに読み込んで表示させていたのですが、
これを新しいものから○件分読み込んで、でも古い順に並べたい、ということです。

新着を○件分表示

よくあるのは、新着記事を○件分表示する、というパターンですよね。

例えば「news」という名前をつけたカスタム投稿タイプの記事を
5件表示するにはこんな感じ

$posts = get_posts('post_type=news&posts_per_page=5');
foreach($posts as $post) :

setup_postdata($post);

「post_type」でカスタム投稿タイプの名前を指定して「posts_per_page」で○件分というのを指定します。
「foreach」で○件分と指定した数の分だけループさせる感じですね。

この下にループさせたい内容を書きます。
例えばタイトルだけリストで表示させたかったら

<ul>
<?php
$posts = get_posts('post_type=news&posts_per_page=5');
foreach($posts as $post) :
setup_postdata($post);
?>
<li><?php the_title(); ?></li>
<?php endforeach; ?>
</ul>

他にも書き方あると思いますが、こんな感じ。

ulはループの外に出さないとこれまでループされて
ulだらけになっちゃいますから注意してくださいね!

これは普通に新しいものが新しい順に並びます。

古い順に表示する

では記事を古い順に並べるのにはどうするかというと
「order」というのを使います。
これは何も指定していないと新しい順なので、逆にするには「ASC」を指定します。

$posts = get_posts('post_type=news&posts_per_page=5&order=ASC');
foreach($posts as $post) :
setup_postdata($post);

こんな感じ。

他にも get_postsで指定できるものが知りたい方はこちらを見るといいかも。

テンプレートタグ/get posts – WordPress Codex 日本語版

色々あるので、使いこなせればいろんなことできるんじゃないかと思います。

これじゃだめじゃない?

私がやってたのはここまで。
これでいけるんじゃないの?ってぼんやり思ってたんですが、よく考えたら
これだと古い方から○件分を古い順に並べることになるんですね。

あれ、これじゃだめじゃないって思って

なんとなくメモがわりにつぶやいて、
雷がなってきたのでMacを終了。

小人の靴やがやってきたっ

いえ、こんな書き方したらものすごーく失礼なんですけど…

雷がおさまったのでMacを起動してTwitterみたら

こんなアドバイスが!

小人の靴やっていうよりはもう神様です。

だって、あのつぶやきから私が何をしたしたいかをくみとって、
的確なアドバイスをくださるんですよ。
WordPressなんて一言も書いてないのに!

本当に感謝です。

そしてこんなふうにすぐに色々思い浮かぶようになりたいと思うけど
いつになることやら。。

でも、いただいてばかりじゃいけないので頑張りますよっ。

というわけで

「新しいものから○件分読み込んで、古い順に並べる」の完成形です。

<ul>
<?php
$posts = get_posts('post_type=news&posts_per_page=5');
$posts = array_reverse( $posts ); 
foreach($posts as $post) :
setup_postdata($post);
?>
<li><?php the_title(); ?></li>
<?php endforeach; ?>
</ul>

おまけ

この一連のおはなしの時に

array_reverseと array_flip というのが出てきて、よく知らなかったので違いを調べました。

array_reverse — 要素を逆順にした配列を返す
array_flip — 配列のキーと値を反転する

だそうです。
勉強になりました。

なにか間違ってたり、もっとこうしたほうがいいよってあったら
ぜひぜひ教えてくださいね!
(アイキャッチ画像作ってる時間なかった〜)

コメントをどうぞ♪