2018/07/15 改訂版 「『あなたの悩み、分かるわ』詐欺に気を付けろ」「周りの人をカウンセラーにしない」「人生なんて相談しても仕方がないことが多い」

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

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

WordPressの場合、投稿記事の並び順は公開日時(降順)がデフォルトです。一方、自分がプロモーションしたい記事をトップに表示したり、カテゴリーやアーカイブページの1ページ目におすすめ記事トップ10を並べたり、見せ方を工夫したい場合がありますね。

公開日時を調整すれば、表示順は操作できますが、記事数が数百にも及ぶ場合、そういう小技は非常に面倒です。

また『Intuitive Custom Post Order』『Simple Custom Post Order』といった有名なプラグインを使えば、管理画面のドラッグ&ドロップで記事の表示順を自由にカスタマイズできますが、お使いのテーマ・テンプレートや常在プラグインによっては上手く動作しなかったり、WordPressの表示速度が遅くなったり、不具合が生じることがありますし、記事数が数百以上に及ぶ場合、数年前の記事をリライトして、リストのトップに引き上げるのも難しいものがあります。(いくらドラッグ&ドロップできても、100以上もの記事をスキップするのは大変)

そこでおすすめしたいのが、ページ属性を使った並び替え。

手順は非常に簡単。

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

ただし、下方に注意書きしているように、一度、属性の数値を書き換えてしまうと、元の数値を入力し直さない限り、そのまま固定されてしまうので、いつかはデフォルトの並び順に戻したい場合は、元々の数値を忘れないよう、メモに控えましょう。

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

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

投稿に属性を追加する

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

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

こんなケースにおすすめ

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

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

[custom-related-posts title=”投稿の並び順に関する記事” order_by=”title” order=”ASC”]

個人的には、記事の並びを更新日順にする方法と隠れアップデート『Stealth update』の応用に書いているように、$query->set( ‘orderby’, ‘modified’ ); のように、orderby を利用するのが一番かと思います。
その際、プラグインの『Stealth update』を併用すると、上位表示させたい記事・させたくない記事を個別に設定できるので、非常に便利です。

//記事の並び順
function my_orderby_modified( $query ) {
    if( $query->is_main_query() ) {
        if( $query->is_home() || $query->is_category() || $query->is_admin()) {
            $query->set( 'orderby', 'modified' );
            $query->set( 'post_type', array( 'post','notes','terayama','morgen','diary','poem' ) );
        }
    }
}
add_action( 'pre_get_posts', 'my_orderby_modified' );

面倒はイヤじゃ

ファイルや投稿の情報をいじりたくない方は素直にプラグインを使いましょう。

ずっと使い続けると管理画面が重くなるという報告もありますので、並び替え作業が済んだら、プラグインは無効化することをおすすめします。

また、記事数が100以上になると、簡単にドラッグ&ドロップできなくなるので、カスタムフィールドや属性で調整するか、プラグインを使うか、テストサイトでじっくり考えることをおすすめします。一度、投稿データをいじってしまうと、簡単には変更できなくなるので。

他にも、Post View を使った調整の仕方もネットに公開されていますので(人気順に並べる)、いろいろ探してみて下さい。

Intuitive Custom Post Order

参考にした記事
新機能を試す – 投稿記事の表示順を複数の条件で指定!

WordPress の記事一覧を更新日時順で表示する

Tags: , ,

最終更新日: 2018年5月16日 初回公開日:2017.12.15

海洋小説『曙光』MORGENROOD

CTA-IMAGE
海洋科学、鉱業、建築などをモチーフにした新感覚の人間ドラマ。『生の哲学』をテーマに人生、恋愛、仕事について描く長編小説です。Kindle Unlimitedなら読み放題。