2016-08-25 15 views
0

コンテキスト:私はポストの人気度の指標としてメタフィールドを使用する人気のある投稿ウィジェットを作成しました。このウィジェットはソーシャルメディア共有プラグインにバンドルされています。一般的なネットワークの共有数を取得すると、その数がメタフィールドに格納されます。記事をソーシャルメディアで何回共有したかに基づいて人気のある投稿を表示するためにメタフィールドにクエリを実行できます。このカスタムWordPressループでは引数が使用されないのはなぜですか?

コードサンプル:これは私が使用しているコードのサンプルです。明らかに、コードのこの部分の後、私たちはwhileループを閉じ、条件をクローズし、クエリのデータをリセットします。このウィジェットファイルの完全な内容は、GitHubにあります:https://github.com/warfare-plugins/social-warfare/blob/master/functions/widgets.php下記の部分は、そのファイルの行330。

// If a custom timeframe is not being used.... 
    if($timeframe == 0): 

     // Create the arguments for a query without a timeframe 
     $swp_args = array(
      'posts_per_page' => $count, 
      'post_type'   => 'post', 
      'meta_key'   => '_'.$network, 
      'orderby'   => 'meta_value_num', 
      'order'    => 'DESC', 
     ); 

    // If a custom timeframe is being used.... 
    else: 

     // Create the arguments for a query with a timeframe 
     $swp_args = array(
      'posts_per_page' => $count, 
      'post_type'   => 'post', 
      'meta_key'   => '_'.$network, 
      'orderby'   => 'meta_value_num', 
      'order'    => 'DESC', 
      'date_query'  => array(
       'column'  => 'post_date', 
       'after'   => '- '.$timeframe.' days' 
      ) 
     ); 
    endif; 

    // Reset the main query 
    wp_reset_postdata(); 

    // Query and fetch the posts 
    $swq = new WP_Query($swp_args); 

    // Begin the loop 
    if($swq->have_posts()) : 
     $i = 1; 
     while($swq->have_posts()): 

      $swq->the_post(); 

問題:私たちは、わずか5,000サイトでこのプラグインを持っています。しかし、少数のサイトでは、カスタムクエリを使用せず、代わりにデフォルトのWordPressクエリを使用します。このような場合、最新の投稿が返され、WordPressの1ページあたりの投稿数に基づいて投稿数が返されます。実際、たとえばあるサイトでは1ページで完璧に動作しますが、アーカイブ/カテゴリページでは、カスタムクエリの代わりにWordPressのデフォルトループを使用するようになります。

WordPressのクエリにいくつかのフックやその他の機能を追加した別のプラグインやテーマで、カスタム引数をオーバーライドしているのだろうかと思います。

これまでに試した唯一のことは、クエリの前後にwp_reset_postdata()を追加することですが、何も修正していないようです。

質問:このカスタムクエリを実行し、カスタムクエリを実行し、既定のWordPressクエリを実行しないことを保証する方法はありますか?

+0

にクエリパラメータを変更する必要がありますボード間でより一貫性のある動作を得るために

コード、私たちはwhileループをクローズし、条件をクローズし、照会後のデータをリセットします。このウィジェットファイルの完全な内容は、ここGitHubにあります:https://github.com/warfare-plugins/social-warfare /blob/master/functions/widgets.php " –

答えて

0

Wordpress documentationによると、WP_Query日付パラメータリストには、がversion 3.7として定義されているように見えます。このクエリが機能しないこれらのサイトのサブセットは、Wordpressバージョン3.7以降を使用していない可能性があります。

私は、このバグが時々どこに現れるか、他の時ではないと思いますが、really old/outdated versions of PHPを使用しています。

たとえばstrtotime('- 180 days')this 3v4l.org testからわかるように、< 5.1.2のバージョンで一貫性のない結果を生成します。それは非常にありそうもないですが、それは動作していないサイトの非常に小さなサブセットであるように見えるので、コードで明らかに間違っていることがない限り、これは私の最高の推測です。この部分の後に、」明らかに:私はオリジナルのポストで言っ引用したものに対応してみましょうあなたの代わりにstrtotime('-180 days')を使用するので、'after' => '-'.$timeframe.' days'

+0

良い観察。しかし、私がテストしていた1つのサイトでは、2つのテストで$ timeframeを0と180の両方に設定しました。 0に設定すると、date_queryパラメーターなしで照会が使用されます。どちらもうまくいかなかった。さらに、私はちょうどこの問題のサイトの一つをチェックし、彼らは確かにWP 4を実行しています。5.x. –

+0

あなたがテストしたWPのどのバージョンでもこのコードが全く機能しないと言っていますか?それとも、それは他の時ではなく時々動作すると言っていますか? – Sherif

+0

このコードは5,000以上のサイトにあります。それは約2または3つでは機能しません。 –

関連する問題