2016-11-11 5 views
2

나는 사용자 정의 필드에 의해 모든 워드 프레스 아카이브를 분류하기 위해 노력하고있어 그래서 내 기능 파일에 작업을 추가,하지만 두 가지 문제가 있습니다워드 프레스 : 더 작은 이미지 사용자 정의 필드에서 아카이브를 정렬하지

  1. 그것은 보여줍니다 이 사용자 정의 필드가있는 게시물 만, 모든 게시물을 표시하고 싶지만, 먼저 whoch는이 필드를 가지고 있습니다.
  2. 게시물 미리보기 이미지가 표시되지 않습니다.

내 작업은 이것이다 : itzmekhokan 제안으로 나는 또한 시도했다

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; 
    } 
}; 

이 :

$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'); 

:

다음
$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'); 

이 시도했습니다 항상 성공하지 못했습니다. Wordpress는이 필드가 설정된 게시물 만 표시합니다.

+0

'OR'은 모든 데이터를 가져 오기 위해 @ Alessandro Pietrantonio –

+0

감사합니다. yoru 답장 @ParthMahida하지만 "OR"로 전달해야합니까? –

답변

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' 
      ) 

을,이에 '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

감사하지만 불행히도 항상 똑같습니다 : 사용자 정의 필드 및 미리보기 이미지가없는 게시물 ... 내가 지금 알아 차 렸던 또 다른 일 : 또한 메뉴 항목이 사라집니다. –