お問い合わせはコチラから

Intuitive Custom Post Orderで並び替えが出来ない時の原因と対策

サイト運営

投稿やページ、カスタム投稿まで自由に並び替えられる便利なプラグインがあります。

Intuitive Custom Post Orderというプラグインです。

このプラグインはとても便利なのでよく使います。

今回、TCD系のテーマでIntuitive Custom Post Orderが使えない現象に出くわして、並び替えに苦労したのでメモしておきます。

Intuitive Custom Post Orderの基本的な使い方のおさらい

Intuitive Custom Post Orderは日本人作者のプラグインです。

フロントエンドでは、ダッシュボードの投稿一覧等でD&Dで並び順を変更できるようになり、バックエンドではその並び順はmenu_orderとして保存され、クエリ実行時にmenu_order順になるようにクエリパラメータをフックして一連の並び替えを実現しています。

Intuitive Custom Post Orderが効かない、動かないという時は?

どうにもこうにも、いうことを聞かないという現象になっている場合は、以下の条件が当てはまっていると思って間違いありません。

Intuitive Custom Post Orderの公式サイトに以下のように書かれています。

また、テンプレート側で、WP_Queryクラス, pre_get_postsフック, query_posts() を使ったカスタムループを生成して、orderおよびorderby引数を指定した場合は、テンプレート側の条件が優先されます。

https://hijiriworld.com/web/wp-intuitive-custom-post-order/

テンプレート側を変更しないとダメということなので、テンプレートの修正が出来ない場合はプラグインによる並べ替えを諦めるしかありません。

そういう場合は、別の方法を使う必要があります。

投稿、ページ、カスタム投稿をプラグインなしで並べ替える方法

Intuitive Custom Post Orderが動かなかったり、テンプレートのwp_queryのパラメータを変更しても全く結果が変わらない原因は、ほとんどの場合、テーマやプラグインによるpre_get_postsフックが上書きしています。

pre_get_postsフックが使われている箇所を探す方法

使用されているフックを確認するのは、QueryMonitorプラグインを使うと簡単です。

Query Monitorで使用されているフックをモニターできるので、pre_get_postsを検索してフックが見つかれば、ビンゴです。

pre_get_postsフックが使われていた場合の対処方法

自分でpre_get_postsを使ってテーマやプラグインのpre_get_postsを上書きすればよいです。

上書きする具体的な方法は、テーマやプラグインでpre_get_postsのフックを定義している記述をそのまま持ってきて、クエリパラメータを変更し、Priorityを下げれば上書きできます。

テーマ側でpre_get_postsフックでorderbyを指定している例

以下はテーマ側で記述されたpre_get_postsのフックの定義の例です。

$query->set( ‘orderby’があるので、プラグインの並べ替えが効きません。

function po_pre_get_posts( $query ) { 
  $options = get_design_plus_option();
  // Modify post order of faq and clinic
  
  if ( is_admin() ) return;
  if ( $query->is_post_type_archive( 'service' ) || $query->is_post_type_archive( 'faq' )) { 
    // Change post order by menu_order and date
    $query->set( 'orderby', array( 'menu_order' => 'ASC', 'date' => 'DESC' ) );
    // Display all posts in archive pages
    if ( $query->is_main_query() ) {
      // Change posts number to display
      $query->set( 'posts_per_page', -1 );
    }
  }
}


add_action( 'pre_get_posts', 'po_pre_get_posts' );

テーマ側のpre_get_postsフックを上書きする例

そのままコピペしてきて、並べ替えたい内容に変更してPriorityを大きくします。

自由に並び替えたかったので、post__inを使って、ID指定しています。

function change_service_order( $query ) {
  $options = get_design_plus_option();
  // Modify post order of faq and clinic
  //if ( is_admin() || ! $query->is_main_query() ) return;
  if ( is_admin() ) return;
  if ( $query->is_post_type_archive( 'service' ) ) { 
    // Change post order by menu_order and date
      $query->set('orderby', 'post__in');
      $query->set('post__in', array(1,2,3));
    // Display all posts in archive pages
    if ( $query->is_main_query() ) {
      // Change posts number to display
      $query->set( 'posts_per_page', -1 );
    }
  }
}
	
add_action( 'pre_get_posts', 'change_service_order',999 );

まとめ

カスタム投稿タイプなどでpre_get_postsフックを使って並び順が初期状態から変更されているテーマなどでは、今回のようにプラグインが使えない問題が起きやすいです。

その場合に自力で並べ替えようと思ってテンプレートファイルを直接修正しても、フックで後から書き換えられてしまうので結果が反映されない現象に悩まされます。

この記事では、Intuitive Custom Post Orderが効かない、動かないという時に自前で並び替えをおこなう時のポイントをまとめました。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました