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

目次

プラグインを使う(最も安全)

トップページやカテゴリー・タグアーカイブの投稿の並び順を一括で変更したい場合、下記のプラグインを使用するのが1番確実で、手軽です。

手動で、ドラッグ&ドロップで、投稿の並び順を任意に変えるプラグインもありますが、WordPressの動作が重くなったり、投稿数が多いと並び替え作業も手間取るからです。(後述参照)

その点、こちらのプラグインは、有効化して、メニューで並び替えの条件を指定するだけ。

管理画面やフィードなど、広範囲に影響を及ぼすことがありません。

限定的、かつ効果的に、ワンクリックで並び替えしたい方におすすめです。

プラグイン『Post Order』について、カテゴリーに親子関係があると、親カテゴリーを選択した時に、子カテゴリーのタイトル一覧が表示されない問題があります。サポートで「将来的に解決する」と回答されていますが、いまだ解決されていない様子。一階層のカテゴリー、およびタグの並び替えには問題ありません。導入する時は、動作をよく確認して下さい。(2020/08/29)

Posts Order
https://ja.wordpress.org/plugins/category-custom-post-order/

プラグインを有効化したら、設定 > Post Order で並び替えの条件を選択します。

並び替えの属性を指定

並び替えができる箇所は次の通りです。

Homepage (トップページ)
Categories (カテゴリー内)
※ 他に、タグ、ナビゲーションメニュー、リンクカテゴリー、投稿フォーマットでの並び替えが可能です。

サポートされるターム

Modified(更新日)
Date (公開日)
Title タイトル順
ID
Author(著者)
Slug(パーマリンクのスラッグ)
Menu Order(固定ページの属性)
Ascending (昇順)
Descending (降順)

並び替えの属性を指定

また、各カテゴリーとタグの編集画面にも、並び替えの条件を指定するメニューが表示されます。(画面最下部なので、少し分かりにくいかも)

・『映画』のカテゴリーでは、タイトル順(昇順)
・『ニュース』のカテゴリーでは、公開日順(降順)

といった、カテゴリー別、タグ別の並び替えが可能です。

各タームの編集画面から並び順を指定

プラグインで指定した並び順が、管理画面、その他に影響して、WordPressそのものが動かなくなるような不具合もありません。

カテゴリーやタグごとに並び順を手軽にカスタマイズしたい方は、ぜひお試し下さい。

追記:2020/08/18

最初に投稿を作成した時、このプラグインは存在しませんでした。
なので、functions.phpの記述を紹介していましたが、下記にも書いているように、WP Queryをよく理解してない人は下手にいじらない方がいいです。
また管理画面から投稿を一つ一つ、手動で入れ替えるプラグインもありますが、動作の煩わしさから、あまりおすすめしません。
どうしても個別に並び順をカスタマイズしたい場合は、公開日を書き替えるか、上記のプラグインを組み合わせて、タイトルの先頭に序数を追記するなどした方が無難です。

『Posts Order』が合わない時は、こちらも試してみて下さい。
ReOrder Posts within Categories
カテゴリー内に限定して、記事を並び替えするプラグインです。設定画面がごちゃごちゃして、私はあまり好きでないです。

単純に、カテゴリー内の記事の並びについて、昇順 / 降順を入れ替えたいだけなら、こちらのプラグインがよいかも。
Post Order By Category

functions.phpとWPクエリを使った記述方法

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

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

見た目は狙い通りに表示できますが、管理画面の投稿の並び順も変わってしまうので、投稿を管理する際、「検索が正しく機能しない」「デフォルトの並び順が把握できない」「ウィジェットの新着記事の並び順がおかしい」等々、弊害の方が大きいからです。

functions.phpをいじって、投稿の並び順を変えれば、カテゴリー&タグ・アーカイブのみならず、ウィジェット、フィード、その他のクエリ、すべてに影響します。

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

どうしても、手動で、安全に、投稿の並び順を変えたければ、投稿日の日付を変えるのが一番です

いったん、公開した後で、5月1日、5月2日、5月3日、のように、日付で序列を付ける方法です。

「公開日」を変更することに抵抗があるかもしれませんが、精度の高いニュースサイトならともかく、訪問者は公開日も更新日もいちいち気にしませんし、SEOにおいては更新日を重視するサイトの方が多いのではないでしょうか。

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

いずれにせよ、functions.phpでメインのクエリをいじって、投稿の順番を並び替えるのは、あまり利口なやり方ではないです。

投稿数の少ない、特化型サイトなら、応用が利くかもしれませんが、それならいっそ、ブログ機能(post)を無効化して、固定ページのみで構成した方が、ページ順の並び替えも簡単で、安全ですよ。ブログ機能の無効化は『Disable Blog』を使えば簡単。

なぜ 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 などを直接コントロールする方法です。

下記ページの『Modify WordPress Query using Code (Advanced)』にもコード記述の一例が紹介されています。

『Advanced(上級者向け)』と銘打ってあるように、メインのクエリを根こそぎ変えるので、投稿数が数百を超えるサイトや、カテゴリー階層の複雑なサイトは要注意です。

WPBeginner
4 Easy Ways to Re-Order Blog Posts in WordPress (Step by Step)
4 Easy Ways to Re-Order Blog Posts in WordPress (Step by Step)Want to change the order of your WordPress blog posts? Here are 4 easy ways to re-order blog psots in WordPress (step by step).

投稿タイプの 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
WordPress 記事の更新日時を自由に変更する:改造版 | Thought is free
WordPress 記事の更新日時を自由に変更する:改造版 | Thought is free2015/02/04 追記: ブログ書く際にソースがメチャ重複してました。修正しました orz 2016/04/27 追記: WpTHK に搭載してるものと(ほぼ)同じ内容に変更...

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

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

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

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

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

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

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

投稿に属性を追加する

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

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 日本語
Archive Control
Archive ControlQuickly customize your custom post type and taxonomy archives with a custom headline, image, and editable content. Modify order and pagination.

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

WordPress.org 日本語
ReOrder Posts within Categories
ReOrder Posts within CategoriesEnables manual ranking of post (and custom post) within taxonomy terms using a drag & drop grid interface.

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

WordPress.org 日本語
Chronological PostsChronological posts reverses the default post order throughout your site to be chronological instead of reverse-chronological.

この記事を書いた人

石田 朋子のアバター 石田 朋子 サイト管理人

作家・文芸愛好家。1998年よりホームページを運営。PCと車が大好きな80年代のサブカルファン。WordPressとは10年以上の付き合い。普段はぼーっとしたお母さんです。小説より漫画とアニメに詳しいヲタで、昭和の名作漫画は大半の台詞を空で言うことができます。東欧在住。本を買ってくれたら喜びます。

目次
閉じる