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