サイドバーなどの記事一覧で先頭固定を有効にする

WordPressでサイドバーなどのメインループと関係ない部分の一覧で先頭固定を有効にする方法をご紹介します。
WordPress 2.7から実装された記事の先頭固定表示ですが、メインのインデックスページ(トップ)でしか反映されません。
フリーで配布されているテンプレートなどでは、メインループ外の一覧をget_postsで行っている物が多く、この方法だと先頭固定表示が有効となりませんので、WP_Queryを使ってデータの取得を行います。

WP_Queryは、コアファイルであるwp-includes/query.phpに定義されているクラスで、WordPressブログへの複雑なリクエストを取り扱うためのものです。
では、早速ですがまずは先頭固定を有効にするためのサンプルスクリプトからです。

// 取得したい件数を指定する
$list_count = 5;

// まずは先頭固定記事のみを取得する
$q_parm = array(
	'post_type'=>'post',
	'posts_per_page'=>$list_count,
	'post__in'  => get_option('sticky_posts')
);

// global変数wp_queryを上書きする(必要がある場合はべつ変数に待避しておく)
$wp_query = new WP_Query($q_parm);
if (have_posts()) : 
	while (have_posts()) :
		the_post();
		/*** ここに表示部分を記述 ***/
	endwhile;
endif;

// 続いて先頭固定記事以外を取得する
$q_parm = array(
	'post_type'=>'post',
	'posts_per_page'=>$list_count,
	'post__not_in'  => get_option('sticky_posts')
);

$wp_query = new WP_Query($q_parm);
if (have_posts()) : 
	while (have_posts()) :
		the_post();
		/*** ここに表示部分を記述 ***/
	endwhile;
endif;

表示部分を2回書かなければならない手間はありますので、共通の書き方であればfunctionを作っておき$postを渡す方法がスマートかもしれません。
変数$list_countには、先頭固定記事+新着記事の合計件数を設定します。

ここでポイントとなるのはglobal変数である$wp_queryです。
取得データをあえて$wp_queryに上書き格納してやることで、have_posts()やthe_post()による記事データの取得が可能となります。

サイドバーなどの記事一覧で先頭固定を有効にするへのコメント

[…] wordpressでのOGP設定最適化 (6 月 1st, 2012) […]

[…] 参考 サイドバーなどの記事一覧で先頭固定を有効にする […]

[…] <ul class="list vertical"> <?php $list_count = 5…qiita.com サイドバーなどの記事一覧&#12… WordPress シェアする Twitter Facebook はてブ Pocket LINE […]

サイドバーなどの記事一覧で先頭固定を有効にするにコメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です