ホームページのカスタム投稿配列をクエリして、配列の順序を維持しようとしています。ある程度はこれでうまくいきます、WordPressは投稿を見つけますが、ループでは順番がすべて混乱しています。
まず最初に、私はpre_get_posts
フックを使ってホームページのメインのクエリを変更しています。これは次のようになります。
if ( is_home() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'page', 'product' ) );
$query->set( 'post__in', array( 103, 14, 127, 115 ) );
$query->set( 'orderby', 'post__in' );
}
ホームページ上の注文はすべて混乱しています!指定された配列に従うことも、発行日に従うこともありません(これがデフォルトです)。代わりに、それは127、103、14、115です。
何が起こったのかを確認するためだけに、ホームページでglobal $wp_query
をvar_dumpedしましたが、問い合わせたSQLは実際には
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE
1=1 AND wp_posts.ID IN (103,14,127,115)
AND wp_posts.post_type IN ('post', 'page', 'product')
AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private')
ORDER BY FIELD( wp_posts.ID, 103,14,127,115 )
LIMIT 0, 10
だから問題ありません!それがまさに起こるべきことです。 $wp_query->posts
の投稿の配列は、順序が間違っています。
カスタム投稿タイプ'product'
がクエリに含まれていることに気付くかもしれません。それは原因ですか?どこを見ればいいですか?
Orderbyをpost__in
に設定します。これはpost__in配列(バージョン3.5で利用可能)で与えられたポストIDの順序を保持します。
$args = array (
'posts_per_page' => -1,
'post__in' => $ids,
'orderby' => 'post__in'
);
私の悪いことに、古い関数をthe_posts
にフックして、それ自身のソートをしました。古いコードを削除するのを忘れました。これでうまくいっています。