自分でブログやってるときはこんな機能全く使わないんですが、仕事で問い合わせが来てしまったので調べざるを得なくなりました。
調べてみると、この機能はindex.phpで表示されるループでしか反映されないようです。(デフォルトテーマでは)
またindex.phpに書いたとしても、get_postsやquery_postsを自分で書いただけでは反映されない。
でも表示したい!という要望があったので以下の記事を参考に改造してみました。
サイドバーなどの記事一覧で先頭固定を有効にする
詳細はまあ書いてある通りなんですが、1つだけ問題が。
トップページには固定記事も含めて3件だけ表示したかったんですが、そのままコピペするとうまく表示されないです。
具体的には、
固定記事が設定されているときはそれらだけが表示され、固定でないものは表示されない
固定記事が1つも設定されてないとなぜかループが連続し、3件以上表示される
記事の問題なのかスクリプトの問題なのかは分からなかったのですが、とりあえず以下の方法で解決しました。
<?php
// 取得したい件数を指定する
$list_count = 3;
// まずは先頭固定記事のみを取得する
$q_parm = array(
‘post_type’=>’post’,
‘category_name’=>’hoge’, //特定カテゴリの記事を取得
‘posts_per_page’=>$list_count,
‘post__in’ => get_option(’sticky_posts’)
);
$wp_query = new WP_Query($q_parm);
//取得できた件数
$getnum = $wp_query->found_posts;
if (have_posts()) :
while (have_posts()) :
the_post();
//ここに表示部分を記述
endwhile;
endif;
?>
<?php
//先頭表示が3件未満の時のみ表示
if( $getnum < 3 ){
$list_count = $list_count - $getnum;
// 続いて先頭固定記事以外を取得する
$q_parm = array(
'post_type'=>‘post’,
‘category_name’=>’info’,
‘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;
}
?>
単純に、表示すべき総数から固定記事の数を引いて、残りの数だけ通常記事のリクエストを行っています。
コードは冗長ですがとりあえず一番分かりやすい方法として。

more from " wordpressの記事で「先頭に固定表示」を有効にする "...