2016-11-11 46 views
2

我試圖通過自定義字段的每一個WordPress的檔案進行排序,所以我添加動作到我的功能文件,但我有兩個問題:WordPress的:通過自定義字段排序存檔中沒有縮略圖

  1. 這表明只有擁有這個自定義字段的帖子,我希望它顯示每個帖子,但首先是那些有這個字段的whoch;
  2. 它不顯示帖子縮略圖。

我的動作是這樣的:

add_action('pre_get_posts', 'my_change_sort_order'); 
function my_change_sort_order($query){ 
    if(is_archive()) 
    { 

     // validate 
     if(is_admin()) 
     { 
      return $query; 
     } 

     $query->set('meta_key', 'my_custom_field'); 
     $query->set('orderby', 'meta_value_num');  
     $query->set('order', 'DESC'); 


     return $query; 
    } 
}; 

正如itzmekhokan建議我也試過這樣:

$meta_query = array(
     'relation' => 'OR', 
     array(//check meta_key exist 
      'key' => 'my_custom_field', 
      'compare' => '!=', 
      'value' => '' 
     ), 
     array(//if no meta_key exist 
      'key' => 'my_custom_field', 
      'compare' => 'NOT EXISTS' 
     ) 
    ); 
    $query->set('meta_query', $meta_query); 
    $query->set('meta_key', 'my_custom_field'); 
    $query->set('orderby', 'meta_value_num');  
    $query->set('order', 'DESC'); 

然後,我已經試過這樣:

$meta_query = array(
      'relation' => 'OR', 
      array(//check meta_key exist 
       'key' => 'my_custom_field', 
       'compare' => 'EXISTS' 
      ), 
      array(//if no meta_key exist 
       'key' => 'my_custom_field', 
       'compare' => 'NOT EXISTS' 
      ) 
     ); 
     $query->set('meta_query', $meta_query); 
     $query->set('orderby', 'meta_value_num'); 
     $query->set('meta_key', 'my_custom_field');  
     $query->set('order', 'DESC'); 

總是沒有成功。 WordPress只顯示有這個字段集的帖子。

+0

傳遞關係爲'OR'獲取所有數據@ Alessandro Pietrantonio –

+0

感謝yoru回覆@ParthMahida但我必須通過「或」什麼? –

回答

0
add_action('pre_get_posts', 'my_change_sort_order'); 

function my_change_sort_order($query){ 

if(is_archive()) 
{ 
    // validate 
    if(is_admin()) 
    { 
     return $query; 
    } 

    $meta_query = array(
     'relation' => 'OR', 
     array(//check meta_key exist 
      'key' => 'my_custom_field', 
      'compare' => '!=', 
      'value' => '' 
     ), 
     array(//if no meta_key exist 
      'key' => 'my_custom_field', 
      'compare' => 'NOT EXISTS' 
     ) 
    ); 
    $query->set('meta_query', $meta_query); 
    $query->set('meta_key', 'my_custom_field'); 
    $query->set('orderby', 'meta_value_num');  
    $query->set('order', 'DESC'); 


    return $query; 
} 
}; 
+0

感謝您的回覆,我試過使用您的功能,但沒有任何更改..它只顯示帖子,其中有my_custom_field –

0

你需要添加空值,在這裏你有「NOT EXISTS」陣列比較鍵值:

  array(//if no meta_key exist 
       'key' => 'my_custom_field', 
       'value'=>'', 
       'compare' => 'NOT EXISTS' 
      ) 

另外,嘗試改變數組,你必須「存在」成這樣:

array(//check meta_key exist 
     'key' => 'my_custom_field', 
     'value'=> 'somerandomvalue123456', //value that obviously won't be in records at all 
     'compare' => '<>' 
    ), 

通過這種方式,查詢構造將考慮'NOT EXISTS'部分,因爲值鍵不會丟失,並且它會搜索其他具有此類元鍵的帖子,但沒有一些隨機值設置爲查詢年。 對此有一個特定的錯誤: https://core.trac.wordpress.org/ticket/23268#comment:22並且在版本4.1中存在,不確定是否仍存在,因爲沒有任何註釋指出該問題實際上已解決。

+0

謝謝,但不幸的是它總是相同的:只有自定義字段和縮略圖的帖子...另一件我現在注意到的事情:也是菜單項消失.. –

相關問題