WordPress, Category ArchiveでもStickyさせたい

WordPressで投稿にSticky(先頭に表示)してもCategoryページだと反映されません。

で、次のようにしてみました。

// sticky
$args = array(
	'posts_per_page' => 1,
	'post__in'  => get_option( 'sticky_posts' ),
	'ignore_sticky_posts' => 1
);
query_posts( $args );
while ( have_posts() ) : the_post();
	get_template_part( 'content', get_post_format() );
endwhile;
wp_reset_query();
 
// 残りの投稿
$wp_query->query_vars['post__not_in'] = get_option( 'sticky_posts' );
query_posts( $wp_query->query_vars );
while ( have_posts() ) : the_post();
	get_template_part( 'content', get_post_format() );
endwhile;

WordPress, ループをカスタマイズする3つの方法

WordPressでループをカスタマイズするメモ。

query_posts()
http://wpdocs.sourceforge.jp/テンプレートタグ/query_posts

global $query_string;
// 全投稿出力
$posts = query_posts($query_string.'&posts_per_page=-1');
 
if (have_posts()) : while (have_posts()) : the_post();
   // ループ処理
   endwhile;
else;
   // not found
endif;
 
// ループをリセット
wp_reset_query();

オリジナルのループを元にカスタマイズしたい時に使用する。
wp_reset_queryを最後に実行する。

WP_Query()
http://wpdocs.sourceforge.jp/関数リファレンス/WP_Query

$args = array(
   'post_type'=>'page',
   'post__in' => array('595', '33', 44)
);
$query = new WP_Query($args);
 
while($query->have_posts()) : $query->the_post();
   // ループ処理
endwhile;
 
// 投稿をリセット
wp_reset_postdata();

オリジナルのループを作成、複数のループを作成。
wp_reset_postdataを最後に実行する。

get_posts
http://wpdocs.sourceforge.jp/テンプレートタグ/get_posts

$myposts = get_posts('posts_per_page=5&offset=1&category=1');
foreach($myposts as $post) :
   setup_postdata($post);
   // ループ処理
endforeach;

リセットはいらない。
引数は配列。

update 2012-03-19
get_posts の時Resetはいらないは間違い。
setup_postdataしてるのでResetしないと!

wp_reset_postdata();

ちゃんとリセットしてあげないと不幸が待ってる。

WordPress クエリをカスタマイズする

WordPress である特定のカテゴリやタグだけ表示を他と変えたい時がある。
わざわざテンプレートファイルを作るほどでもない時は、オリジナルループの条件を足したり変更したりすることで対応できる。

条件を文字列で指定する時は $query_string を利用する。

// 表示件数を20件に変える
query_posts($query_string."&showposts=20");

条件が category__in, category__not_in... など配列指定が必要な条件の時は
$wp_query->query_vars を使用する。

// カテゴリID 5, 8, 7 を除く
$wp_query->query_vars['category__not_in'] = array(5,8,7);
query_posts($wp_query->query_vars);

WordPress は本家も日本語版もドキュメントが他のCMSなどに比べて充実していると思う。
ただテンプレートタグの説明はだいたいあるけど、変数になるとどこに説明があるのかが分かりにくい、と思ったりする。

Codex を上手に使うと WordPress はもっと楽しくなる。
Codex 日本語版
Codex