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'
) ); ?>
  • nipper_onside

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

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

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

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

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

      • nipper_onside

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

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

    質問があるのですが…
    こちらのプラグインは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にアプデートさせていただきましたので、こちらをお試しください。

  • jdbb

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

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

  • Pingback: 時系列に左右されない並べ替え。 | mamakiru.net()

  • Tsukasa Ueda

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

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

    • hijiriworld

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

      • Tsukasa Ueda

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

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

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

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

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

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

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

        • 了解です。

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

          • hijiriworld

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

  • Pingback: 投稿記事の並び順を変更できるプラグイン「Intuitive Custom Post Order」 | WordPress初心者の使い方メモブログ()

  • Pingback: WordPressでカスタム投稿タイプをRSS配信させる定番ソースコードのバグにご注意 - WordPress / ITコンサルティング 福岡|株式会社ランドマークス - 集客できるホームページ制作やビジネスブログ()

  • 永 高橋

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

    • > 高橋さん
      コメントありがとうございますッ

  • Pingback: ゴーゴーウェブマーケット技術BLOG | 投稿の順番をドラッグで変更できるプラグイン()

  • 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/

  • Pingback: 今日のリンク | じじのブログ(https)()

  • Pingback: WordPress超初心者メモ~おすすめプラグイン - 地下組織()

  • 連絡用アカウントです

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

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

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

    よろしくお願いします

    • 最新版をご利用ください。

  • Pingback: WordPressの投稿を並び替える | BLACK WALKER()

  • さの

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

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

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

      • さの

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

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

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

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

          • さの

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

  • ひとみ

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

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

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

    • 小林

      横から失礼します。
      先ほどカスタムタクソノミーにて同様の現象が発生し、
      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’ );
      }
      }

      • ひとみ

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

        ためしてみますね♪

  • なるご

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

    • なるご

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

  • 通りすがりのペンギン

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

    $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’ );
    > }

    • v3.0.8 でこのget_posts固有の問題を解消するアップデートを行いました。
      ご確認ください。

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

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

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

    • v4.7.2でも動作確認をしておりますが、
      機能しなくなった内容を詳しく教えていただけますか?

  • myt

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

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

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

    よろしくお願いします。

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

      • myt

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

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

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

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