【WordPress】「先頭に固定表示」が効かないときに試してみたこと
「先頭に固定表示」にチェックを入れてた記事。
でも、先頭に表示されない。。。
ループの条件指定を見直すことで解決しました!
「先頭に固定表示」が効かない??
記事設定で「先頭に固定表示」にチェックをします。
すると公開日に影響されず、記事一覧の先頭に固定表示が出来ます。
上記の設定をしましたが。。。
構築したWPサイトで「先頭に固定表示」にチェックを入れているのに効かない!
「先頭に固定表示」が効かなかった条件
・オリジナルテーマを使用(試しに、デフォルトのテーマに切り替えたところ、「先頭に固定表示」が正常に機能しました。)
・home.php内で、query_postsを使い、特定のカテゴリースラッグの投稿記事一覧を表示
ループの記述を見直してみる
以下が当初の記述。
query_postsで、特定のカテゴリースラッグの記事を表示する条件指定をしていたところ、
「先頭固定表示」が機能しませんでした。
<?php query_posts(‘category_name=news’);?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
試しに、query_postsでの条件指定を外し、基本ループのみにしてみると
「先頭に固定表示」が機能しました。
<?php if(have_posts()): while(have_posts()): the_post(); ?>
query_postsでの条件指定に問題がありそう、
という事で以下のパターンを試してみました。
×特定のカテゴリースラッグの記事を表示
<?php query_posts(‘category_name=news‘);?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
→「先頭に固定表示」が機能しない
×特定のカテゴリースラッグの記事を除外
<?php query_posts(‘category_name=-event‘);?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
→「先頭に固定表示」が機能しない
×特定のカテゴリーidの記事を表示
<?php query_posts(‘cat=1‘);?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
→「先頭に固定表示」が機能しない
○特定のカテゴリーidの記事を除外して表示
例:カテゴリーid1の記事一覧で記事を先頭固定表示したい場合
<?php query_posts(‘cat=-2,-3‘);?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
→「先頭に固定表示」が機能した!
上記の結果から、query_postでの条件ループで、
特定のカテゴリーの投稿一覧で記事を固定させるには
特定のカテゴリーidの記事を除外する事で実現可能という事が分かりました。
【補足】
今回の検証は、かなり前に構築したサイトだった為、query_postをベースにしての検証となっていますが、現在query_postの使用は非推奨となっています。
極力、WP_Queryやget_postsでの条件ループの使用が望ましいです。
<番外編>「先頭に固定表示」を無効にするには?
「先頭に固定表示」にチェックが入ってても、公開日順に並べたい
そんな時はパラメーター「ignore_sticky_posts」を使います。
ignore_sticky_posts=0
初期値。「先頭に固定表示」を無視しない(先頭に固定する)
(設定値「false」では正常に機能しませんので数字で指定しましょう。)
ignore_sticky_posts=1
「先頭に固定表示」を無視する(投稿リストにそれらの投稿が本来並ぶべき位置に出す)
(設定値「true」では正常に機能しませんので数字で指定しましょう。)