サブループからメインループに変更するにあたって、meta_query
の条件が効かない状況です。
サブループでは次のように記事取得条件を書いておりきちんと機能しますが、同様の条件が後述のメインクエリ版で機能しません。//公開条件
の部分です。
ちなみに//公開条件
は、「meta_query
によってユーザーIDが1の人に対して記事を公開するか否かを判別したい」という意図で書いたものです。
###サブループ版
こちらは機能します。
php
1function get_the_query() { 2 $paged = get_query_var('paged') ? get_query_var('paged') : 1; 3 $args = array( 4 // 基本条件 5 'paged' => $paged, 6 'posts_per_page' => 10, 7 'post_type' => 'mypost', 8 // 公開条件 9 'meta_query' => array( 10 array( 11 'key' => 'targetIds', 12 'value' => 1, 13 'compare' => 'LIKE', 14 'type'=>'NUMERIC' 15 ), 16 array( 17 'key' => 'targetIds', 18 'value' => '', 19 'compare' => '=', 20 ), 21 'relation'=>'OR' 22 ), 23 ); 24 $the_query = new WP_Query( $args ); 25 return $the_query; 26}
###メインループ版
こちらが問題のソースコードになります。上と同じはずの// 公開条件
が機能せず、原因と解決策についてご意見を頂ければ幸いです。どうぞ宜しくお願い致します。
php
1function myPreGetPosts( $query ) { 2 $paged = get_query_var('paged') ? get_query_var('paged') : 1; 3 // 管理画面 4 if ( is_admin() || ! $query->is_main_query() ){ 5 return; 6 } 7 // フロントページ 8 if ( $query->is_home() ) { 9 // 基本条件 10 $query->set('paged', $paged); 11 $query->set('posts_per_page', 10); 12 $query->set('post_type', 'mypost'); 13 // 公開条件 14 $query -> set( 15 'meta_query' => array( 16 array( 17 'key' => 'targetIds', 18 'value' => 1, 19 'compare' => 'LIKE', 20 'type'=>'NUMERIC' 21 ), 22 array( 23 'key' => 'targetIds', 24 'value' => '', 25 'compare' => '=', 26 ), 27 'relation'=>'OR' 28 ) 29 ); 30 } 31} 32add_action('pre_get_posts','myPreGetPosts'); 33
###メインループ版2
kei344様から頂戴したアドバイスを元にして、上のメインループ版を、次のメインループ版2に改良しました。(後述するエラーが出ます。)
php
1 2function myPreGetPosts( $query ) { 3 $paged = get_query_var('paged') ? get_query_var('paged') : 1; 4 // 管理画面 5 if ( is_admin() || ! $query->is_main_query() ){ 6 return; 7 } 8 // フロントページ 9 if ( $query->is_home() ) { 10 // 基本条件 11 $query->set('paged', $paged); 12 $query->set('posts_per_page', 10); 13 $query->set('post_type', 'mypost'); 14 // 公開条件 15 $query -> set( 16 array( 'meta_query' => array( 17 array( 18 'key' => 'targetIds', 19 'value' => 1, 20 'compare' => 'LIKE', 21 'type'=>'NUMERIC' 22 ), 23 array( 24 'key' => 'targetIds', 25 'value' => '', 26 //'compare' => '=', // どちらにしても同じエラー 27 'compare' => 'NOT EXISTS', // どちらにしても同じエラー 28 ), 29 'relation'=>'OR' 30 ) ) 31 ); 32 } 33} 34add_action('pre_get_posts','myPreGetPosts'); 35
上のメインループ版2によって次のエラーが出ます。
(on line 231
というのは、array( 'meta_query' => array(
の行です。)
Warning: Missing argument 2 for WP_Query::set(), called in /export/user/c/zjp_95167c/live_77a5b6/var/wordpress/wp-content/themes/pingraphy-child/functions.php on line 231 and defined in /export/user/c/zjp_95167c/live_77a5b6/var/wordpress/wp-includes/class-wp-query.php on line 1604 Warning: Illegal offset type in /export/user/c/zjp_95167c/live_77a5b6/var/wordpress/wp-includes/class-wp-query.php on line 1605 Notice: Undefined variable: value in /export/user/c/zjp_95167c/live_77a5b6/var/wordpress/wp-includes/class-wp-query.php on line 1605