並び順 ソート

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

並び順 ソート

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

しかし、記事の並び順を任意にカスタマイズしたい場合、プラグインを使うか、functions.phpで記事の並び順を指定するしか方法がありません。

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

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

プラグインの場合、『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の記述を取り入れると上手くいきます。

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

Thought is free

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

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

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

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

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

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

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

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

手順は非常に簡単。

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から記述を消せば、デフォルトの公開日時順に戻りますが、変更した属性の数値はそのまま残ります。

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

※ 参照記事はこちらです。

Thought is free

WordPress のアーカイブやカテゴリページは通常「投稿日時順」で表示されるのだが、 「更新日時順」で表示する方法は…

素直にプラグインを使う

アーカイブ・コントロール系のプラグインもあります。
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…

>海洋小説『曙光』MORGENROOD

海洋小説『曙光』MORGENROOD

宇宙文明の根幹を支える稀少金属ニムロディウムをめぐる企業と海洋社会の攻防を舞台に描く人間ドラマ。生きる道を見失った潜水艇パイロットと愛を求めるフォルトゥナの娘の恋を通して仕事・人生・社会について問いかける異色の海洋小説です。
Kindle Unlimitedなら読み放題。
Amazonの海洋学ランキングで一位を記録。

CTR IMG