並び順 ソート

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

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

が、小説サイトのように、物語の冒頭をアーカイブのトップに固定して、ストーリー順(昇順)に記事を並べたい場合。

リライトした記事を常にカテゴリーやタグ・アーカイブの上位に表示したい場合。

等々。

公開日時ではなく、記事の並び順を狙い通りにカスタマイズしたいケースがあると思います。

公開日時を調整すれば、表示順をコントロールすることもできますが、記事数が数十、数百にも及ぶ場合、そんなちまちました事はやってられないですね。

Intuitive Custom Post Order』『Simple Custom Post Order』といった有名プラグインを使えば、管理画面のドラッグ&ドロップで記事の並び順を自在にカスタマイズすることができますが、お使いのテーマ・テンプレートや常駐プラグインによっては上手く動作しなかったり、WordPressの表示速度が異常に遅くなったり、不具合も多いです。カテゴリー内の記事数が多ければ、ドラッグ&ドロップの動作も非常に手間取ります。

そこでおすすめしたいのが、記事の並び順をカスタムフィールドのメタ値で指定する方法。これが一番簡単で、自由度が高いです。
このページには記載してないので、上記リンクでご確認下さい。最近、発見した小技なので、スミマセン。

ここでは「functions.phpに記述する方法」と「ページ属性を使う方法」を紹介しています。

functions.phpで投稿を任意の順番に並び替える

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

orderby で 並び順を指定します。WP_Queryの『順序づけパラメータ』を参考にして下さい。

他にも、投稿ID、タイトル、ランダムなど、様々なカスタマイズが可能です。


//記事の並び順
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','notes','word' ) );
}
}
}
add_action( 'pre_get_posts', 'my_orderby_modified' );

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


$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->is_home() || $query->is_tag() || $query->is_admin()) {

★リファレンス

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

トップページやカテゴリーページの記事の並びを更新日順にしている場合、文字訂正したり、画像を入れ替えたり、ちょっと手を加えただけで、いちいち更新日がリフレッシュされて、記事リストの最上位にくると面倒ですよね。

そういう場合、ステルス・アップデートを行えば、更新日などに一切変更を加えませんので、希望の並び順を維持することができます。

更新日時を自由に変更する

プラグインを使わず、投稿画面から細かに更新日時をコントロールしたい場合は、下記サイトのfunctions.phpの記述を取り入れると上手くいきます。

更新日時を手動で変更、更新日時を消去、修正のみ(更新日を変更せず記事更新)、通常更新と、四つのタイプにカスタマイズ可能なので、興味のある方はぜひ。

WordPress 記事の更新日時を自由に変更する:改造版

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

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

この方法は、記事数が少なく、サイトの内容が固定している小規模サイトにのみおすすめです。

頻繁に記事を追加したり、カテゴリー別に順序を入れ替えるような、アクティブなブログにはお勧めしません。

おすすめするのは、次のようなサイトです。

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

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

手順は非常に簡単。

functions.phpに、次の二つの記述をするだけです。

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

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

1. 投稿に属性を追加する。

2. サイトのホーム、カテゴリー、アーカイブに、属性の数値が反映されるように調整する。

投稿に属性を追加する

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

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


add_post_type_support( 'post', 'page-attributes' );

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

あとは、並べたい順番に数値を書き入れます。

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

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

投稿の属性

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

ページ属性の数値が反映されるよう、functions.phpに下記のように記述します。
この場合、menu_order が、属性の数値になります。
並び順は、12345….と、分かりやすい並びにしたいので、昇順に設定しています。


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' );

これでサイトのトップページ、カテゴリー一覧、アーカイブの記事の並び順が、属性で指定した数値通りになります。
属性の数値は全投稿に対してデフォルトで入力されているので、過去記事にさかのぼって、一つ一つ、手動で入力する必要はありません。
単純に、1番に表示したい記事に、属性『1』を指定するだけです。

ただし、プロモーション期間が終わって、記事の並びをデフォルトに戻したい場合(通常の公開日時順)、以前の数値を入力しない限り、元に戻りません。

このように、元々の数値が300台だった過去記事でも、一度『1』に設定してしまうと……

投稿の属性

このようにトップに固定されてしまい、以前の数値を入力しない限り、ずっとトップのままです。

投稿の属性

以前の数値を忘れてしまうと、永久に元に戻らなくなるので、ご注意下さい

functions.phpから記述を消せば、デフォルトの公開日時順に戻りますが、変更した属性の数値はそのまま残ります。

上記のような問題から、現在はカスタムフィールドを使った方法をオススメしています。こっちの方がずっと簡単で、修正しやすいですよ。
→ 記事の並び順をカスタムフィールドのメタ値で指定する方法

広告

ライティングの最新記事4件

>海洋小説『曙光』MORGENROOD

海洋小説『曙光』MORGENROOD

ニムロディウムという架空の金属元素を中心に、鉱業、海底鉱物資源、深海調査、海洋情報ネットワーク、建築&デザインなどをテーマに描く人間ドラマ。水深3000メートルに眠るニムロディウムの採掘は世界を変えるのか。生の哲学を中心に海洋社会に生きる人々の願いと攻防を描きます。Google Driveにて無料サンプルPDFも配布中。

CTR IMG