並び順 ソート

投稿を任意の順番で並び替える functions.phpとページ属性の使い方

並び順 ソート
このページでは、functinos.php、もしくは、ページ属性を使った投稿の並び順をカスタマイズする方法を紹介しています。

しかし、実際にやってみた体験談として、あまりこの方法は推奨されません。

確かに、サイト上では、狙い通りに表示できますが、管理画面の投稿の並び順も変わってしまうので、投稿を管理する際、「検索が正しく機能しない」「デフォルトの並び順が把握できない」「ウィジェットの新着記事の並び順がおかしい」等々、何かしら不具合が生じる可能性があるからです。

早い話、管理画面の投稿の並び順が変われば、サイト上のカテゴリー&タグ・アーカイブのみならず、ウィジェット、フィード、その他のクエリ、すべてに影響するわけですね。

「管理画面の並び順はデフォルトのまま、カテゴリー・アーカイブだけ、投稿の並び順を“更新日”ベースに変えたい」と企図しても、それを実装するのは、よほどの上級者でないと難しいと思います。

投稿数がそれほど多くなければ、差し支えないですが、総投稿数が数百を超える場合、思わぬエラーに遭遇することもありますので、手動で、安全に、投稿の並び順を変えたければ、投稿日の日付を変えるのが一番です。

いったん、公開した後で、5月1日、5月2日、5月3日、のように、日付で序列を付けるオーソドックスなやり方です。

「公開日」を変更することに抵抗のある人もあるかもしれませんが、精度の高いニュースサイトならともかく、訪問者は公開日も更新日もいちいち気にしません。検索結果をクリックする時に『情報の鮮度』として意識するぐらいです。

どうしても公開日にこだわりがあるなら、『初稿:2020年5月1日』のように、投稿内に本当の公開日を明記する方法もあります。

長年、サイト運営してきた実感として、公開日付の古い、過去の記事は、どんどん底に埋もれて、検索エンジンにも認識されにくくなりますので、公開日を変更するついでに、記事にもきちっと修正を加え、どんどん序列を上げていくのも一つの手だと思います。

なぜ functions.phpを使うのか

WordPressの場合、投稿の並び順は公開日時(降順)がデフォルトです。

しかし、投稿の種類によっては、ストーリーや更新日順にカスタマイズしたいケースもあります。

・ 小説サイトのように、物語の冒頭をアーカイブのトップに固定して、ストーリー順(昇順)に投稿を並べたい。
・ リライトした記事を、常にカテゴリーやタグ・アーカイブのトップに表示したい
・ おすすめ順に並べたい

プラグインの場合、『Intuitive Custom Post Order』『Simple Custom Post Order』といった有名どころを使えば、管理画面のドラッグ&ドロップで投稿の並び順を自由にカスタマイズできますが、お使いのテーマ・テンプレートによっては上手く動作しなかったり、WordPressの表示速度が遅くなったり、不具合も多いです。

カテゴリー内の投稿数が多ければ、ドラッグ&ドロップの動作も非常に手間取ります。

ここでは、functions.php + カスタムフィールド、もしくはページ属性を使う方法を紹介しています。

ただし、お使いにテーマ・テンプレートや、プラグインの条件によっては、「管理画面で検索ができない」「最新記事のウィジェットが正しく動作しない」「思い通りにコントロールできない」等々、不具合が生じることもありますので、一つ一つ、動作を確認しながら、作業を進めて下さい。

カスタムフィールドのメタ値で投稿の並び順をカスタマイズする

カテゴリー・アーカイブや、タグ・アーカイブで、投稿の並び順を、カスタムフィールドのメタ値でコントロールする方法です。

まず、カスタムフィールドに、任意の名前(name)と値(value)を入力します。

『名前』は、何でも分かりやすいものでOK。

『値』は、投稿数が多い場合、1、2、3、4・・のような一桁ではなく、01、02、03・・・、もしくは、001、002、003・・・のような、二桁~三桁をおすすめします。

その方が確実に序列が反映されるので。

カスタムフィールドに並び順の数値を入力

続いて、functions.php に次のコードを記入します。

ここでは、投稿の並び順(order)を「 ASC (昇順)」に設定していますが、ランダム(rand)、降順(DSC)も使えます。

その他の query->set は、WordPressの関数リファレンス/WP Queryを参照のこと。

add_action( ‘pre_get_posts’, ‘my_change_sort_order’);
function my_change_sort_order($query){
if(is_archive()):
//If you wanted it for the archive of a custom post type use: is_post_type_archive( $post_type )
//Set the order ASC or DESC
$query->;set( ‘order’, ‘ASC’ );
//Set the orderby
$query->;set( ‘meta_key’, ‘story’ );
$query->;set( ‘orderby’, ‘meta_value_num’ );
endif;
};

投稿管理に便利な『Admin Column Pro』

上記の方法にプラスして、有料プラグインの 『Admin Column Pro』 を使えば、管理も楽になります。

参照記事 → WordPressの管理画面を見やすくする『Admin Column Pro』

カスタマイズした投稿一覧の表示です。

『STORY』というカスタムフィールドの名前について、数値の順に投稿が並んでいます。

Pro版なら、管理画面から直接インライン編集できるので、数十の投稿も一気にデータを書き替えることができます。

カスタムフィールドの数値を使った投稿管理

設定画面。

Admin Column Proの設定画面

投稿数の多いサイト、頻繁に過去記事の整理を行う方には便利なプラグインです。

functions.phpとWP_Queryを用いたカスタマイズ

こちらは、functions.php を使って、main_query や、is_archive、 is_page、 is_tag などを直接コントロールする方法です。

投稿タイプの post、news、word について、トップページおよびカテゴリー・アーカイブの投稿の並びを更新日順にしたい場合。

//投稿の並び順
function my_orderby_modified( $query ) {
if( $query->is_main_query() ) {
if( $query->is_home() || $query->is_category() ) {
$query->set( ‘orderby’, ‘modified’ );
$query->set( ‘post_type’, array( ‘post’,’word’,’news’ ) );
}
}
}
add_action( ‘pre_get_posts’, ‘my_orderby_modified’ );

カテゴリー movie で、 タクソノミ action と sf を持つもののみ、という条件で。

is_category(‘movie’) && is_tax(‘action’,’sf’)

タイトル順に並び替えたい場合。

$query->set( ‘orderby’, ‘title’);
$query->set( ‘order’, ‘ASC’ );

投稿タイプではなく、特定のカテゴリーで並べ替えたい場合。

カテゴリーIDが 4 であれば

$query = new WP_Query( ‘cat=4’ );

カテゴリーの名前が book であれば

$query = new WP_Query( ‘category_name=’book’ );

先に紹介したWP_Queryのリファレンスを参考に、タグ、タクソノミーなど、様々な条件で記事の並び替えを行うことができます。

$query->is_home() || $query->is_category() の部分も、WP_Query の条件分岐タグを参考に。

is_archive()  is_page()  is_tag()  などを組み合わせて、条件を指定して下さい。

こちらは管理画面での並び替えを含む一例。

if( $query->setis_home() || $query->is_tag() || $query->is_admin()) {

■ 他にも、投稿ID、タイトル、ランダムなど、様々なカスタマイズが可能です。以下のリファレンスを参考にして下さい。

https://wpdocs.osdn.jp/条件分岐タグ

https://developer.wordpress.org/reference/classes/wp_query/

プラグイン『Stealth update』で更新日時をコントロール

記事の並び順を更新日時に設定した場合、「誤字を訂正する」といった小さな変更でも、『更新』をクリックすると、更新日時が最新に書き換わり、並び順がどんどん入れ替わってしまいます。

自身で更新日時をコントロールしたい方には、隠れアップデート・プラグイン『Stealth Update』がおすすめです。

その名の通り、ステルスで記事の更新を行うものです。

やや古いプラグインですが、最新版のWordPressでもちゃんと作動します。

Stealth Update
https://wordpress.org/plugins/stealth-update/

管理画面でプラグインを有効化すると、投稿画面の『公開』にチェックボックスが出現します。

『公開』もしくは『更新』の時に、Stealth update? にチェックを入れて、いつものように更新のボタンをクリックするだけ。

チェックを入れた投稿は、更新日は変わらず、RSSやその他にも影響を及ぼしません。

プラグイン Stealth Update

管理画面の『クイック編集』にもチェックボックスがあります。機能は同じです。

プラグイン Stealth Update

Stealth Updateにチェックを入れて、更新日の変更を制御している投稿には、次のような鍵マークが表示されます。

プラグイン Stealth Update

更新日時をさらに細かくカスタマイズする

プラグインを使わず、投稿画面から細かに更新日時をコントロールしたい場合は、下記サイトの方法が有効です。

「更新日時を手動で変更」「更新日時を消去」「修正のみ(更新日を変更せず記事更新)」「通常更新」の四種類から選べます。

Thought is free

2015/02/04 追記: ブログ書く際にソースがメチャ重複してました。修正しました orz 2016/04/27 追…

ページ属性を使った並び替え

以前、この方法を推薦していたのですが、ページ属性で数字を指定してしまうと、簡単に書き換えができない上、デフォルトの記事の並び順まで分からなくなるので、現在はお勧めしません。

この方法は、投稿数が少なく、サイトの内容も固定している小規模サイト向けです。

特定のカテゴリーやカスタム投稿の中で並び順を固定したい
 (シリーズ記事で、第一章、第二章、第三章と、流れに沿って見せたい)

プロモーションしたい記事を半永久的にサイト上位に固定したい
 (サークル紹介、人気記事、購買手続きなど、トップページに表示する ← 案内に便利)

繰り返しになりますが、一度、ページ属性の数値を書き換えてしまうと、デフォルトの数値を入力し直さない限り、そのまま固定されてしまいます

将来的に、デフォルトの並び順に戻したい場合は、本来の数値を忘れないよう、メモしておいて下さい。

投稿に属性を追加する

『属性』とは、固定ページにデフォルトで備わっている『固定ページの属性』とのことです。

functions.phpに下記のように記述すると、通常の投稿にもページ属性の入力ボックスが現れます。

add_post_type_support( ‘post’, ‘page-attributes’ );

カスタムポストに適用したい場合は、’post’ に、カスタム投稿タイプの名前を記入します。

次いで、並べたい順番に数値を書き入れます。

なお、通常投稿の場合(post)、デフォルトの数値は、記事が作成された逆順になっています。

投稿数が767の場合、一番古い記事だと、順序は767になります。

投稿の属性

属性の数値が反映されるようにする

ページ属性の数値が反映されるよう、functions.phpに下記のように記述します。

この場合、menu_order が、属性の数値になります。

並び順は、昇順(ASC)に設定しています。

function change_posts_query( $query ) {
if( $query->;is_main_query() ) {
if( $query->is_home() || $query->is_category() || $query->is_archive() ) {
$query ->; set( ‘post_type’, ‘post’ ); // 投稿
$query ->; set( ‘orderby’, ‘menu_order’ ); // 指定順
$query ->; set( ‘order’, ‘ASC’ ); // 昇順
}
}
}
add_action( ‘pre_get_posts’, ‘change_posts_query’ );

これでサイトのトップページ、カテゴリー一覧、アーカイブの記事の並び順が、属性で指定した数値通りになります。

素直にプラグインを使う

アーカイブ・コントロール系のプラグインもあります。
functions.phpのカスタマイズが上手くいかない場合は、こちらのプラグインも試してみて下さい。

カテゴリーやタグのアーカイブページの記事の並び順を細かく設定できます。

WordPress.org 日本語

Quickly customize your custom post type and taxonomy archive…

各カテゴリー内の記事の並び順を、手動、もしくはAutoでカスタマイズできるプラグインです。
特定のカテゴリーやタグに限定して並び順を指定するのに便利です。

WordPress.org 日本語

Enables manual ranking of post (and custom post) within taxo…

単純に、投稿日を昇順で表示するプラグインです(日付の古いものがトップにくる)
シリーズの連続ものを日付でソートするなら、一番手っ取り早い。

WordPress.org 日本語

Chronological posts reverses the default post order througho…

NO IMAGE

海洋小説『曙光』MORGENROOD

宇宙文明の根幹を支える稀少金属『ニムロディウム』をめぐる企業と海洋社会の攻防を描く人間ドラマ。生き道を見失った潜水艇パイロットと、運命を握る娘の恋を通して仕事・人生・社会について問いかける異色の海洋小説です。
Kindle Unlimitedで公開中。冒頭部の無料PDFもあり。

CTR IMG