先日カスタム投稿で作成してた記事を気軽に順番入れ替えしたいとの要望があったので、ここはプラグインを導入しようと考え、インストールしてみました。

そのプラグインは「Simple Custom Post Order」というもので、投稿や固定ページなどの順番を管理画面から楽に変更できるというものです。

普段、投稿や固定ページの順番は投稿した日付により順番が上から新しいものにならんでいたり、その後の並び替えの操作によってID順だったりタイトル順だったりと様々です。

このアーカイブデータを関数で取り出すときにorderby、orderによってどのような並び方で取り出すかを指定し、取り出した後は繰り返し文によるループで表示させたりすると思います。

このカスタム投稿を表示するテンプレートファイルは自作で組み込みましたので、アーカイブデータはget_postsで取り出して表示するようにプログラムしていました。

しかし、通常ではそのような操作せずとも管理画面で並び替えた順で表示するとのことだったのですが、結果は変わらず。登録が新しいもの順でデータを取り出されてしました。

orderにASCやDESCを設定しても変わらず。

元々プラグインの詳細説明では、パラメータを使用するカスタムクエリは除きますとのことだったので、昇順降順の影響も省かれる感じでしょうか。

では何が問題だったのでしょうか。並び替えの基準の指定が悪かったのでしょうか。

元々’orderby’はpost_dateにしていました。いわゆる投稿順。デフォルトはdate。IDやnoneなど色々と試してみましたが、上手く反映せず。

しかし、やっと反映したものが見つかりました。それはmenu_orderと言うもの。ページの表示順で並び替えというものなのだそう。

どのような場合でこれが基準となる画面があるのかは今後の課題となってしまいましたが、ひとまずこれで管理画面上での並びと同じアーカイブデータが取り出せるようになりました。

因みに、タクソノミーでカテゴリを絞り込むと、適合するデータが選ばれた上でさらに管理画面でならんだ順となっているので、menu_orderで問題なさそうです。

 

$args = array(
'posts_per_page' => -1,
'orderby' => 'menu_order', // ← ここにmenu_order
'order' => 'ASC',
'post_type' => 'blog', // ポスト名
'taxonomy' => 'category',
'term' => '分類名',
'post_status' => 'publish'
);
$archive_data = get_posts( $args );