sticky(先頭に固定表示)した記事だけをget_postsでループさせて表示させる方法

とあるサイトにて「特定の投稿を幾つかトップに特集として表示したい。お客さんが使うからWordPressの管理画面から簡単に出来たらいい。」という要望を受け、sticky(先頭に固定表示)を使ってやってみるか〜と思ってstickyだけをget_postsでループさせようかと思ったのですがやり方が良くわかんなくて結構迷ったので作業メモ。

sticky(先頭に固定表示)した記事IDを取得する関数

なんとなくget_postsのオプションにpost_type=stickyみたいなのが有るのかと思ってましたが見つからず・・・。

他に方法が無いか探していたら、get_optionという関数にsticky_postsというパラメータを指定すればstickyに設定した(これ何ていうんだろ、スティックした???)投稿IDを取得出来るという情報を発見。試してみると、stickyした投稿のIDが配列で取得出来ました!

//適当な変数 $stickys に入れてprint_rで出してみる
<?php $sticky = get_option('sticky_posts');?>
<?php print_r($sticky);?>

//出力結果
Array ( [0] => 14 [1] => 12 [2] => 16 [3] => 10 )

stickyした投稿IDが取れれば先が見えてきました。get_postsで投稿データを取る時、パラメータにincludeを指定してやれば指定した投稿だけ取ってきますね。

<?php $news = get_posts("posts_per_page=6&include=****");?>
<?php foreach($news as $post):?>
<?php setup_postdata($post);?>
	
	<p><?php the_title();?></p>

<?php endforeach;?>
<?php wp_reset_postdata();?>

しかし、ここでまた疑問が・・・

配列データをどうやってカンマ区切りの数字にするのだ?

うーん分からん。。。という事でまた調べてみましたら、implodeという関数で配列を好きな文字列で連結出来るみたい!PHP凄い!

さっそくget_optionで取得したstickyの配列をimplodeにかけてカンマ区切りにしてみました。

//echoしてみる
<?php echo implode(",",get_option('sticky_posts'));?>

//結果
14,12,16,10

投稿IDの配列がカンマ区切りで出ました!もう完成間近!最後にimplodeしたやつを適当な変数に入れてget_postsのパラメータに突っ込めばOKですね!表示記事数を指定するposts_per_pageは適宜変更してください。

<?php $sticky = implode(",",get_option('sticky_posts'));?>
<?php $news = get_posts("posts_per_page=6&include=$sticky");?>
<?php foreach($news as $post):?>
<?php setup_postdata($post);?>
	
	//ここにループ内容
	<p><?php the_title();?></p>

<?php endforeach;?>
<?php wp_reset_postdata();?>

完成!これでsticky(先頭に固定表示)した投稿だけ出てくると思います。もしコードに不備やもっと良質な書き方がありましたらご指摘頂けると幸いです。

SPONCERD

コメント(0件)