WordPress 直感的に投稿記事の並び順を変更するプラグインを公開しました Intuitive Custom Post Order

プラグイン初回リリース時の記事のため内容が古い可能性があります。
最新情報は以下のプラグイン公式ページをご覧ください

Intuitive Custom Post Order

Intuitive Custom Post Order

WordPressの投稿記事はディフォルトで投稿日時の降順ソートになります。
ただのブログであれば問題ありません。

ただ、カスタム投稿タイプとカスタムフィールドを組み合わせて、WordPressをCMSとして開発・運用する場合には、投稿記事というのは”コンテンツ“の意味合いが強くなり、並び順、つなり表示順も自由に変更したいという要望も出てきます。

そこで、直感的に投稿記事の並び順を変更するプラグインを公開しました。

Intuitive Custom Post Orderプラグインの概要

WordPressの投稿記事はディフォルトで投稿日時の降順ソートになります。また、これがサイト上での表示順にもなります。

icpo1

Intuitive Custom Post Orderプラグインをインストールして有効化すると、管理画面の投稿記事一覧画面でドラッグアンドドロップでの並び替えが可能になります。

icpo2

操作は以上です。(超簡単だねッ!^^

ドラッグアンドドロップが完了した時点で、並び順は自動的に保存されます。

並び替えの対象オブジェクトは、投稿、固定ページ、カスタム投稿タイプです。
設定オプションから並び替えを有効にするオブジェクトを選択することも可能です。

途中でプラグインを停止したり、対象オブジェクトから除外した場合、並び順は投稿日時の降順ソートに戻ります。

また、テンプレート側で、WP_Queryクラス, pre_get_postsフック, query_posts() を使ったカスタムループを生成して、orderおよびorderby引数を指定した場合は、テンプレート側の条件が優先されます。

カスタムタクソノミーの並び順にも対応しました

カスタムタクソノミーの並び替えにも対応しましたッ!!
操作手順はカスタム投稿と同じです。

インストール手順

1. 管理画面からインストールするか、直接ダウンロードしてインストールしてください。(WordPress.org/Intuitive Custom Post Order
2. 管理画面からプラグインを有効化してください。
3. (オプション)設定オプションの「Intuitive CPT」から、並び替えを有効にするオブジェクトを選択可能です。

より詳しい説明

ページングも問題なし

投稿記事が1ページに表示する件数を超えた場合、ページングされて表示されます。
2ページ目以降で並び替えを実行しても、前後のページの並び順には影響を与えません。

ソートも問題なし

カテゴリーソートした状態で並び替えをした場合、ソートされて表示されている記事同士のみが並び替えられ、それ以外の記事の並び順は影響を与えません。

階層記事も問題なし

階層記事の並び替えも可能です。
親記事を並び替える場合、ドラッグアンドドロップをしている際には子記事が追従しているように見えませんが、リロードすればきちんと追従します。
また、子記事同士を並び替えることも可能です。

ページを跨いだ記事の並び替え方法は?

1ページに表示されている記事同士しか並び替えはできません。
「表示オプション > ページ送り > ページごとに表示する項目数」を編集して、並び替え対象の記事が1ページに表示されるようにしてから並び替えをしてください。

並び順の再上書き方法

プラグインで設定した並び順をテンプレート側でさらに上書きする方法です。

サブクエリ

‘WP_Query’ オブジェクトか ‘get_posts()’ を使って再上書きができます。

› WP_Query

<?php $query = new WP_Query( array( 'orderby' => 'date',
	'order' => 'DESC',
) ) ?>

› get_posts()

<?php $query = get_posts( array( 'orderby' => 'title',
) ) ?>

ただし、デフォルトの並び順(orderby=date, order=DESC)に上書きするためには、独自のパラメーター default_date を指定する必要があることに注意してください。
これは get_posts() を使う場合のみの注意点です。

<?php $query = get_posts( array( 'orderby' => 'default_date',
	'order' => 'DESC',
) ) ?>

メインクエリ

‘pre_get_posts’ アクションフックか ‘query_posts’ を使って再上書きができます。

› pre_get_posts

function my_filter( $query )
{
	if ( is_admin() || !$query->is_main_query() ) return;
	if ( is_home() ) {
		$query->set( 'orderby', 'date' );
		$query->set( 'order', 'DESC' );
		return;
	}
}
add_action( 'pre_get_posts', 'my_filter' );

› query_posts

<?php query_posts( array( 'orderby' => 'rand'
) ); ?>

Comments

  • sd1127 より:

    昨日コメントさせて頂いたものです。
    仕様上の問題はなくこちらの確認間違いでした。自己解決しております。
    大変失礼致しました。

  • sd1127 より:

    とても便利なプラグインを提供頂きありがとうございます。

    カスタム投稿の記事一覧ページ(archive-xxx.php)で並び替えを使用しているのですが、
    その詳細ページ(single-xxx.php)に設置したページネーション(previous_post_link())ではデフォルト(ID)順のリンクを取得してしまいます。

    詳細ページも一覧ページと同様の並び順で遷移させるにはどの様なアプローチが必要となりますでしょうか?

  • katsumaeno より:

    いつも便利に使わせていただいております。
    先日公開されましたwordpressの4.9.4にアップデートしたところドラックで入れ替えても再読み込みすると元に戻ってしまうようです。
    ご報告いたします。

    • hijiri より:

      ご報告ありがとうございます。
      こちらでは4.9.4でも動作確認済みです。
      なにか特定の条件があるかもしれませんので、他の情報あれば教えていただけますか

      • katsumaeno より:

        いまざっと調べたところTag Groupsというpluginとコンフリクトしているようでした。
        他にもカスタマイズしている部分が多数ありますので再度確認させていただきます。
        ありがとうございました。

  • Noriaki Fujiwara より:

    逆順の設定が不足している為、
    ‘order’ => ‘DESC’
    と指定した場合でも、ASCに変換されております。
    3.1.0
    intuitive-custom-post-order.php
    651行目に
    if ( $wp_query->get( ‘order’ ) == ‘ASC’) {
    $wp_query->set( ‘order’, ‘ASC’ );
    } else {
    $wp_query->set( ‘order’, ‘DESC’ );
    }
    とすることで、orderに対し手に処理を追加することで、逆順に対応させました。

    • hijiri より:

      ありがとうございます。コードを確認させていただき反映を検討させていただきます。
      ちなみにクエリを発行する関数はなにを使っていますか?WP_Queryオブジェクトでしょうか、get_postでしょうか?

      • Noriaki Fujiwara より:

        get_postです。
        逆順で表示する必要があり、orderだけ指定したのですが反映されなかったので、調査した結果
        orderbyがある場合、ASC固定で処理されていたため分岐処理を追加した次第です。
        逆順表示自体まれなことだと思いますが、ギャラリー作成で登録順かつ並び替え後の順という特殊なケースでした。

  • hnatyann より:

    はじめまして
    便利なプラグインをありがとうございます。
    記事の件数が52で一度に表示できず、
    順番が変えられず
    非常に困っております。
    既出の案件でしたら申し訳ございませんがどうしたらよいか教えていただけるとうれしいです。

    当方昇降順を古いほうから自動的に表示したいと考えておりますが
    該当するプラグインが見つからず、
    自分でいじりましたところ、真っ白になってしまっているので
    プラグイン以上のことができず、
    お知恵を拝借できればと存じます。
    どうぞよろしくお願いいたします

  • myt より:

    非常に便利なプラグインありがとうございます。
    いつも大変お世話になっております。

    WP4.7.3で使おうと有効化したところ投稿一覧のデフォルトの並び順がタイトル順になってしまったのですが、
    こちらデフォルトの並び順を日付順に変更することは可能でしょうか。

    お忙しいところ大変恐縮ですが、お手透きのときにでもご確認いただければと思います。

    よろしくお願いします。

    • hijiri より:

      一覧画面でタイトルソートがかかっていたりしないでしょうか?
      v4.7.3でも動作確認をしており、再現性がありません。

      • myt より:

        返信ありがとうございます。

        プラグインを有効にすると一覧画面でタイトルソートがかかってしまい、そこで日付でソートをしても並び替えされない状態です。

        こちらのプラグインを使う前に別の並び替えのプラグインを使っていたので、
        もしかしたらその情報とぶつかってるのかもしれません。

        こちらでその辺りを含めて色々と試してみます。
        お忙しいところご確認いただきありがとうございました。

  • より:

    とても便利なプラグインをありがとうございます。利用させていただいています。

    最近WP4.7.2にバージョンアップすると、こちらもプラグインが機能しなくなったようです。。
    今後プラグインのバージョンアップ等でご対応されるご予定があるか教えて頂けないでしょうか。

    お忙しいところ申し訳ございませんが、何卒よろしくお願いいたします。

  • 通りすがりのペンギン より:

    便利なプラグインありがとうございます。利用させていただいてます。
    記事の順番を並べ替えて逆順に表示させる際

    $posts = get_posts(array(
    ‘category_name’ => ‘example’,
    ‘post_type’ => ‘post’,
    ‘post_status’ => ‘publish’,
    ‘posts_per_page’ => -1,
    ‘orderby’ => ‘menu_order’,
    ‘order’ => ‘DESC’,
    ));

    このように記述しました。
    ですが、orderbyはかかっているのですがorder指定がうまく動作しませんでした。
    発行されているSQLを確認したところASCに強制的に書き換えられているようにみえたので
    ソースコードを確認したところ463行目で DESCの場合はASCにする処理が入っていました。

    そこでこんな感じにしたら、希望通りの挙動ができたのですが、
    ASCに固定している理由は何かあるのでしょうか?

    448c448,452
    get( ‘order’ ) == ‘DESC’ ) $wp_query->set( ‘order’, ‘ASC’ );

    > if ( $wp_query->get( ‘order’ ) == ‘DESC’ ){
    > $wp_query->set( ‘order’, ‘ASC’ );
    > } else if( $wp_query->get( ‘order’ ) == ‘ASC’ ) {
    > $wp_query->set( ‘order’, ‘DESC’ );
    > }

  • なるご より:

    とても便利なプラグインありがとうございます。使わせていただいております。
    投稿一覧で並び替えができ、思っていたことが実現できました。
    カスタムメニューを使っているのですが、順番を入れ替えた記事だけ「current-menu-item」クラスがつかないのです。
    現在の記事のナビはデザインを変えているので、ついたらありがたいのですが、このクラスが付くようにできますでしょうか?

    • なるご より:

      すみません、別の理由でクラスが付いていませんでした。何も問題なくクラスが付きました。
      勘違いで書き込んでしまい、大変申し訳ございませんでした。

  • ひとみ より:

    デフォルトである「投稿」のカテゴリーページの記事は順番を入れ替えることが出来るのですが、
    カスタム投稿タイプのカテゴリー(タクソノミー)を作って、そのカテゴリー別の一覧ページを表示させると、
    日付順になっているだけでの記事の順番がかわりません。。。

    新着記事は順番が変わりますが、カテゴリー別の記事一覧は変化がありません。

    どのようにすればいいんですか?

    • 小林 より:

      横から失礼します。
      先ほどカスタムタクソノミーにて同様の現象が発生し、
      functions.phpに以下のコードを追加することで解決しました。
      ※is_taxのパラメータは適宜書き換えてください。

      add_action( ‘pre_get_posts’, ‘my_pre_get_posts’ );
      function my_pre_get_posts( $query ) {
      if ( is_admin() || ! $query->is_main_query() ) return;

      if ( $query->is_tax( ‘foo’ ) ) {
      $query->set( ‘orderby’, ‘menu_order’ );
      $query->set( ‘order’, ‘ASC’ );
      }
      }

      • ひとみ より:

        コメントくださったことに今気づきました。
        ありがとうございます!

        ためしてみますね♪

  • さの より:

    すばらしいプラグインありがとうございます!
    バグなのか一応報告させていただきます。

    前の記事、次の記事を表示するテンプレートタグで、同一カテゴリの第3引数にtrueを入れても
    このプラグインを使っているとtrueが効かないようです。

    • hijiri より:

      報告ありがとうございます。
      previous_post_link だと思いますが、テンプレートタグの詳細が分かれば教えていただけますか?引数の指定方法など具体的にいただけるとありがたいです。

      • さの より:

        ご返信ありがとうございます。

        single.phpからcontent.phpを呼んでおります。
        content.php内に下記のテンプレートタグをいれております。

        よろしくお願い致します。

        • hijiri より:

          ver. 3.0.6 をリリースしました!
          こちらをお試してください。

          • さの より:

            ありがとうございます!
            確認したところ問題なく動作しております。
            素晴らしいプラグインありがとうございます。

  • […] Intuitive Custom Post Orderっていうプラグインがとっても使いやすい。 日時を変えたりとかしなくても、ドラッグするだけで簡単に投稿の順番を並べ替えられる。 […]

  • 連絡用アカウントです より:

    いつもプラグインを利用させて頂いています

    以前のアップデートによりorderby’ => ‘rand’が再度利用できなくなっているようです

    お手数をお掛けしますがご対応いただけませんでしょうか

    よろしくお願いします

  • […] Intuitive Custom Post Order~カスタム投稿の順番を簡単に入れ替えられます。必須!説明こちら […]

  • […] WordPress 直感的に投稿記事の並び順を変更するプラグインを公開しました Intuitive Custom Post Order | hijiriworld Web […]

  • Masayoshi Mizuho より:

    いつも利用させていただいております。ありがとうございます。

    get_posts()でカスタムループを作って、最新記事を載せたいと思い、
    ‘orderby’ => ‘post_date’,’order’ => ‘DESC’を入れますと、orderbyは効くのですが、orderが効きません。
    ASCで固定になってしまっているように思います。
    query_posts()にしたり、書き方を変えたり、
    色々やってみたのですが、解決策を見いだせず、、、

    現在、wordpress3.8.1 + Intuitive Custom Post Order2.0.8で使っています。
    ご教示いただけないでしょうか? よろしくお願いいたします。

    • hijiriworld より:

      ‘orderby’ => ‘post_date’, ‘order’ => ‘DESC’ というディフォルト条件をテンプレート側で明示的に指定した場合、そちらが優先されるように改修致します。お待ちください。

      • Masayoshi Mizuho より:

        ありがとうございます!! すいません。いつでも結構です。よろしくお願いいたします。

      • nogu より:

        私もこの機能是非欲しいとおもっていました!よろしくお願いいたします!

      • hijiriworld より:

        近々アップデート致します。お待ちください。

    • hijiriworld より:

      ver.2.0.9 をリリースしました。
      改善しているはずです。
      お試しください!!

      • Masayoshi Mizuho より:

        すいません。2.0.9にバージョンアップしたのですが、
        こちらの環境では、効果を確認出来ませんでした。
        以前と同じ「orderbyは効くけれど、orderが効かない」状態です。

        • hijiriworld より:

          $args = ‘orderby=date&order=DESC’ と指定した場合に効かないということでしょうか?
          $args = array( ‘orderby’ => ‘date’, ‘order’ => ‘DESC’ ) でもダメですか?

          • Masayoshi Mizuho より:

            ありがとうございます!!できました!
            今まで書いていたソースだとこのような形でした。
            http://dev.rokomiz.com/wp/test/
            書いていただいた4番目の方法で成功しました。
            よく分かってなくて、すいません。
            貴重なお時間をいただきまして、ありがとうございました。

          • hijiriworld より:

            上記URLの3番目の指定だとうまく動かないということですね。

            改修します。
            ありがとうございます。

          • Masayoshi Mizuho より:

            あと、気づいたのですが、header.php・sidebar.php等に書いて読み込ませると
            書いていただいた方法でも、うまく動かないようです。
            http://dev.rokomiz.com/wp/test/

  • […] 番が変えれてかなり便利でした。 WordPress 直感的に投稿記事の並び順を変更するプラグインを公開しました Intuitive Custom Post Order […]

  • 永 高橋 より:

    こ、これが欲しかった!
    まさか日本の方が作ってるとは。僕も頑張らねば。
    Simple Page Ordering使ってましたが、CPTでは効かなかったんですよね。
    素敵なプラグインありがとうございました!

  • kaburk より:

    こんにちわ、便利なプラグインを公開ありがとうございます。
    使わせていただいています。
    Wordpress3.5.1にて導入してみたのですが、
    プラグインをオンにすると管理画面のメディアの並び順や
    公開しているサイト側のRSSフィードの並び順も変わってしまう
    ようなのですが何か対応策はないでしょうか。

    RSSフィードについてはfunctions.phpにソート順を記述して対応してみたのですが、
    管理画面内はちょっとわからず、何かアドバイスをお願いします。

    • hijiri より:

      > kaburkさん
      確認させてください。管理画面の「メディア」の項目は並び替え対象オブジェクトに含んでおりませんが、ここでも並び替えが可能になっているということでしょうか?それとも、テンプレート側で意図しない並び順になるということでしょうか?

      • kaburk より:

        メディアの件はテンプレート側の話ではなくて管理画面の動作のことです、
        わかりづらくてすみません。
        管理画面内にメディアは並び替えができない正しい状態なのですが、
        プラグインを有効にすると意図しない並び順になってしまようです。
        元々並んでいた順ではなく、何か固定された並び順になるようです。

        また、管理画面のメディア一覧画面で、ヘッダをクリックした時の日付ソートが
        機能していない状態のようです。
        プラグインを無効にすると治るのですが、何か原因は考えられるでしょうか。

        ちなみにテストした環境は製作中の環境の他に、
        WP3.5.1新規インストール&Intuitive Custom Post Orderプラグインのみ、
        日本語テストデータ( http://megumi-manuals.com/ )のテスト環境でも同じでした。

        • hijiri より:

          了解です。

          メディアのオブジェクトが並び替え対象にならないよう、検証の上対応させていただきますね。

          • hijiriworld より:

            本不具合を修正した ver.2.0.9 をリリースしました。
            こちらをお試しください。

  • Tsukasa Ueda より:

    非常に使いやすいプラグイン公開有難うございます。
    カテゴリーの入れ替えもしたいと思い、動作させてみたのですが
    さすがに現状のものではカテゴリー変更はできないのですね?

    もし、可能であればカテゴリーの変更も可能のプラグインを作成お願いします。

    • hijiriworld より:

      > Tsukasa Uedaさん
      現時点では、並び替え対象のオブジェクトは、投稿、固定ページ、カスタム投稿タイプのみです。
      タクソノミー(カテゴリー、タグ)の並び替えにも対応するかは、今後の検討事項とさせていただきます。

      • Tsukasa Ueda より:

        ご返答有難うございます。
        是非ぜひご検討の程、宜しくお願い致します。

  • […] サンプルとして構築中のテーマで利用できそうな、Intuitive Custom Post Orderプラグイン。 […]

  • jdbb より:

    すばらしいです!!
    今まではカスタムポストタイプにのみ対応。カテゴリ毎にのみ対応というものしかなく
    使いづらかったのですがこれとps taxonomy expanderを組み合わせると
    カテゴリ内での並べ替えもカスタム分類・カスタム投稿どちらの要求にも答えられます!

    • hijiri より:

      > jdbbさん
      ありがとうございます。是非お使いください。
      要望や不具合等ありましたらお知らせください。

  • Naoko Hanasaka より:

    こんばんは!
    とっても便利なプラグインで、使わせて頂いています。ありがとうございます!

    質問があるのですが…
    こちらのプラグインはIE9に対応しておりますでしょうか?

    私個人はChromeで管理画面を見ていて、動作も問題ないのですが、
    IEをお使いのクライアント様より、管理画面のレイアウト崩れ及び動作自体しない、と
    指摘され、こちらでもIE9で管理画面を見たところ、ご指摘の通りでした…
    こちらのプラグインを無効化すると、レイアウトが正常に戻るので、
    何か一端があるのかなと思い、質問させていただきました。

    wordpressメニューの「プラグイン」からこのプラグインを検索して
    インストール、有効化したのですが、何か問題がありますでしょうか?

    wordpressのバージョンは3.4.2、使用テーマは「Headless」です。
    また、クライアント様の使い勝手の問題で、support関数を

    ‘supports’ => array(‘title’,’thumbnail’,’author’,’comments’,’revisions’,’page-attributes’),

    のように変更しているのですが、この辺も関係ありでしょうか…。
    申し訳ありませんが、ご教示いただけませんでしょうか。
    宜しくお願いいたします。

    • hijiriworld より:

      > Naoko Hanasakaさん
      IE9での不具合についてご報告ありがとうございます。
      この問題を修正してver.1.2.1にアプデートさせていただきましたので、こちらをお試しください。

  • nipper_onside より:

    とても使いやすくて素敵なプラグインをありがとうございます。
    ひとつ質問 & 要望なのですが、現状ではプラグインをインストールすると『orderby’ => ‘rand’』と記述したランダム表示もソートされてしまいます。これを他のプラグインのように『’orderby’ => ‘menu_order’』等の記述した場合のみソートするようにできませんでしょうか?
    テンプレートに何も記述せずにインストールするだけで使えるというのもありがたいのですが、ランダム表示がある場合にこのプラグインが使えず残念です。

    お忙しいと思いますが是非ご検討頂けないでしょうか。

    それではよろしくお願いします。

    • hijiri より:

      > nipper_onside さん
      要望ありがとうございます。
      次期アップデートの時に検討させていただきますッ

    • hijiri より:

      > nipper_onside さん
      アップデートしました。
      orderおよびorderbyを指定したカスタムループの場合、そちらが優先されるようにしました。

      • nipper_onside より:

        早々に対応していただきありがとうございます。これで、ランダム表示の一覧があっても大丈夫なのでこのプラグインに切り替えます (^-^)

コメントを残す