2016-08-25 18 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(); 

問題:我們有剛剛超過5000點這個插件。但是,在少數幾個網站上,它不使用我們的自定義查詢,而是使用默認的WordPress查詢。在這些情況下,它會返回最新的帖子,並根據每頁WordPress的帖子設置返回帖子的數量。實際上,例如,在一個網站上,它可以在一個頁面上完美顯示,但在歸檔/類別頁面上,它會恢復爲使用WordPress默認循環而不是我的自定義查詢。

我不知道他們是否是另一個插件或主題添加了一些鉤子或什麼不是WordPress的查詢,並重寫我的自定義參數。

我迄今試過的唯一的事情是在我的查詢之前和之後添加wp_reset_postdata(),但它似乎沒有解決任何問題。

問題:有沒有什麼辦法可以運行這個自定義查詢,並保證它運行自定義查詢並且永遠不會運行默認的WordPress查詢?

+0

讓我引用我在原來的職位說作出迴應:「很顯然,這部分後,代碼,我們關閉while循環,關閉條件,重置後期查詢數據等。這個小部件文件的完整內容可以在GitHub上找到:https://github.com/warfare-plugins/social-warfare /blob/master/functions/widgets.php「 –

回答

0

根據Wordpress documentation它看起來像date_query定義爲WP_Query日期參數列表中的version 3.7。有可能這些查詢不起作用的站點子集不使用Wordpress 3.7或更高版本。

我能想到的唯一的另一件事情就是這個bug有時會出現,而不是其他時間會使用really old/outdated versions of PHP

例如strtotime('- 180 days')將在PHP < 5.1.2版本上產生不一致的結果,如您在this 3v4l.org test中所看到的。這是不太可能的,但因爲它似乎是一個非常小的網站,它不工作的子集,並認爲沒有任何其他顯然是錯誤的代碼這將是我最好的教育猜測。

爲了獲得更一致的行爲越過你應該使用strtotime('-180 days')而不是板,所以修改您的查詢參數'after' => '-'.$timeframe.' days'

+0

良好的觀察。但是,在我剛剛測試的一個站點上,我將$ timeframe設置爲0和180兩次測試。設置爲0時,它將使用不帶date_query參數的查詢。都沒有工作。另外,我剛剛檢查了一個有這個問題的網站,他們的確在運行WP 4。5.x的 –

+0

你是說這個代碼在你測試過的任何WP版本上都不起作用?或者你是否有時說它有效,但不是其他時間? – Sherif

+0

此代碼位於5,000多個網站上。它只能在其中的大約2或3個上運行。 –

相關問題