WordPressの管理画面でカスタム投稿タイプを利用していると、投稿の並び順を自由に切り替えたいケースがあります。この記事では、管理画面の投稿一覧に「並び順」ドロップダウンを追加し、選択に応じて投稿を並べ替える方法を紹介します。
並び順セレクトを管理画面に追加する
以下のコードを functions.php
に追加することで、投稿一覧の上部に並び替え用のセレクトボックスを追加できます。
// ドロップダウンメニューの追加
function add_custom_orderby_dropdown() {
global $typenow;
if ($typenow === 'your_post_type') {
$orderby = isset($_GET['orderby_custom']) ? $_GET['orderby_custom'] : '';
echo ' <select name="orderby_custom">';
echo '<option value="">並び順を選択</option>';
echo '<option value="title"' . selected($orderby, 'title', false) . '>タイトル順</option>';
echo '<option value="menu_order"' . selected($orderby, 'menu_order', false) . '>メニュー順</option>';
echo '<option value="date"' . selected($orderby, 'date', false) . '>公開日順</option>';
echo '</select>';
}
}
add_action('restrict_manage_posts', 'add_custom_orderby_dropdown');
※your_post_type
の部分は実際のカスタム投稿タイプ名に置き換えてください。
並び替え条件に応じたクエリ変更処理
選択された並び順に応じて、クエリの orderby
を変更する必要があります。以下のようにフックで制御します。
// クエリを並び順に応じて変更
function custom_orderby_query($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
global $pagenow;
if ($pagenow === 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] === 'your_post_type') {
if (!empty($_GET['orderby_custom'])) {
$orderby = $_GET['orderby_custom'];
$query->set('orderby', $orderby);
$query->set('order', 'ASC'); // または DESC に変更可能
}
}
}
add_action('pre_get_posts', 'custom_orderby_query');
カスタムフィールドで並び替えたい場合
例えば、priority
というカスタムフィールドを使って並び替えたい場合は、次のようにします。
if ($orderby === 'priority') {
$query->set('meta_key', 'priority');
$query->set('orderby', 'meta_value_num');
}
まとめ
管理画面の投稿一覧に並び順セレクトボックスを追加すれば、カスタム投稿の運用効率が大幅に向上します。タイトル順やカスタムフィールド順など、必要な軸に応じて柔軟に拡張可能です。業務用途でWordPressを利用する場合には、ぜひ取り入れておきたい機能の一つです。