それで、私はカスタム投稿タイプ 'properties'を持っています。
私はarchive-properties.php
を使っています、そして$query
にいくつかのパラメータを設定する必要があります。
アーカイブページを開いてからすでに存在していたnew WP_Query
をページネーションプラグインがページ分割しようとしているという問題が発生したため、$query
を使用したくありません。
だから今私の問題は、私がposts_per_page
を2
に設定してバックエンドにログインした場合、2つの投稿しか表示されないことです。
フロントエンドのクエリを変更するのにこれが必要ですが、バックエンドは変更しません。 if文に何を含めるべきかわかりません。
function set_query_parameters($query) {
if( is_main_query() && is_post_type_archive( 'properties' ) && !$_SESSION ) {
$query->set('posts_per_page', 12);
$query->set('orderby', array(
'date' => 'DESC',
));
}
return $query;
}
add_action( 'pre_get_posts', 'set_query_parameters' );
WP_Queryを使用しないという決定に関しては、WP_Queryの新しいインスタンスを作成するのではなく、pre_get_posts
を選択することが実際に優れています。実際、pre_get_posts
は、メインクエリを変更するときに使用すべきものです。各ページの読み込みで個別のクエリを実行するのではなく、実行する前にメインクエリのパラメータを変更します。はるかに効率的!
あなたはほとんどそこにいます。 _!is_admin()
をif
ステートメントに追加する必要があります。また、is_main_query()
を具体的に呼び出す必要があります 関数に渡される$query
オブジェクト上 。
これらの2つの変更により、if
ステートメントは次のようになります。
if( !is_admin() && $query->is_main_query() && is_post_type_archive( 'properties' ) && !$_SESSION ) {
また、filterとは対照的に、Wordpressアクションに値を返す必要がないことに注意する価値があります。 pre_get_posts
の場合、引数は 参照渡し であるため、$query
変数に加えた変更は自動的に有効になります。