【WordPress】フロントでIntuitive Custom Post Orderの並び替えが効かないとき

状況

ドラッグ&ドロップで並び替えができる便利なプラグインIntuitive Custom Post Orderで、管理画面は並び替えられているのにフロント側では反映されていないな…?っていうときのメモ。

原因

要約すると

  • 並び順はmenu_orderとして保存されている
  • カスタムタクソノミーアーカイブ(taxonomy-○○.php)ではデフォルトの日付順に表示されてしまうことがある

ようです。

解決策

query_posts()でmenu_order順に並び替えるようにすれば解決しますが、検索するとテンプレート内でquery_posts()を使うような解決策が提示されているページが多く出てくるので注意。function.phpに記載するようにします。

下記は、カスタムタクソノミー「download」アーカイブページで並び順をmenu_order順にしてくれっていうアクションフックです。

function download_sort_order($query)
{
    if (is_admin() || !$query->is_main_query()) {
        return;
    }
    if ($query->is_tax('download')) {
        $query->set('orderby', 'menu_order');
        $query->set('order', 'ASC');
    }
}
add_action('pre_get_posts', 'download_sort_order');

参考