• WordPress 3.9.2を使っています。

    WP_Queryを使って投稿を検索しているのですが、検索結果がwp-cronと手動とで異なるようなのです。

    スケジュールのwp-cronからWP_Queryを実行すると、指定したパラメータが無視されてしまいます。
    ところが、手動で実行した時にはパラメータが正しく反映されます。

    例えば、wp-cronからの実行だと以下のような単純なパラメータも無視されてしまいます。

    //クエリーハッシュを作る
    	$H_query = array
    	(
    		'post_status'		=> 'private' ,
    	);
    
    	//記事を検索する
    	$O_query = new WP_Query( $H_query );
    
    	//WP_Queryをリセット
    	wp_reset_postdata();

    「post_status」で「private」を指定しても「publish」を引っ張ってきます。

    $O_queryの中身をファイルにダンプしたところ「request」にはパラメータが正しく設定されていました。

    なにより解せないのは同じコードでも手動で実行した時にはパラメータが反映され、正しい検索結果になることです。
    wp-cronからの実行だとWP_Queryが正しく動かせないなにかがあったでしょうか?
    調べてもさっぱりわからないため混乱しています。

    どのような原因が考えられるかアドバイスをお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック投稿者 s-y-u

    (@s-y-u)

    WP_Queryで検索した値が手動とwp-cronの時とで異なる件で追記です。

    パラメータに「post_status」を指定しない場合、手動の時、

    [request]の値には
    wp_posts.post_status = ‘publish’ OR
    wp_posts.post_status = ‘future’ OR
    wp_posts.post_status = ‘draft’ OR
    wp_posts.post_status = ‘pending’ OR
    wp_posts.post_status = ‘private’

    と5つのステータスがORで入るのですが、wp-cronではひとつだけの

    wp_posts.post_status = ‘publish’

    となっています。

    WP_Queryはwp-cronと手動での実行とでは、検索結果が同じだと思っていたのですが、指定しないパラメータの入り方が異なるようです。
    これはwp-cronでの実行と手動での実行とで検索結果が異なることに関係しているのでしょうか。
    因みにプラグインはすべて外して、テーマはデフォルトのもので試しています。

    他の人には再現性のない自分だけの問題??

    post_status以外のパラメーターを指定した場合はどうなるでしょうか?

    たとえば「post_typeをpageにする」などです。

    他のパラメーターで試して認識される -> 特定のパラメーターが駄目
    なのか
    他のパラメーターで試しても駄目 -> どのパラメーターも駄目
    なのか、です。

    ここからは私の推測ですが、
    可能性としては、「cronの場合は、決めうちパラメーターがある」もありえるかな、と思いました。
    (publishでないものをcronから操作できないようにする、など)

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「WP_Queryの検索結果がwp-cronと手動とで異なる」には新たに返信することはできません。