맞춤 입력란의 orderby meta_value가 포함 된 맞춤 검색어


36

아시다시피, WP3.0부터 사용자 정의 고급 쿼리 옵션이 있습니다. 현재 meta_key, meta_value와 같은 사용자 정의 필드의 일부 쿼리 매개 변수는 새로운 meta_query 매개 변수에 대해 더 이상 사용되지 않습니다 ( 여기 참조 ).

새로운 meta-key (order_in_archive)를 포함하는 특정 post_type (서비스)에 의한 쿼리 게시물 인 새로운 구문으로 매우 간단한 쿼리를 시도합니다. 이는 예상대로 진행됩니다. 그러나-meta_value로 쿼리를 정렬하고 성공하지 못했습니다.

이것은 내 쿼리입니다-

   query_posts(
    array(  'post_type' => 'services',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'meta_query' => array(
            array('key' => 'order_in_archive'))
    )
);

나는 또한 meta_value_numeric과 meta_value에 의해 orderby를 시도했지만 어떤 경우에도 결과는 게시 날짜 (정규 게시물처럼)로 정렬됩니다. 어떻게 할 수 있는지 아는 사람이 있습니까?

감사

답변:


35

이전 방법을 사용하여 orderby 매개 변수 의 메타 키를 정의 할 수 있습니다 (WP 3.1.1에서 테스트 됨) ...

query_posts(
    array(  'post_type' => 'services',
            'order'     => 'ASC',
            'meta_key' => 'some_key',
            'orderby'   => 'meta_value', //or 'meta_value_num'
            'meta_query' => array(
                                array('key' => 'order_in_archive',
                                      'value' => 'some_value'
                                )
                            )
    )
);

15

이 문제는 일반적으로 명명 된 쿼리를 사용하여 WordPress 4.2에서 해결됩니다 . 예 :

$args = array(
  'post_type' => 'services',
  'orderby'   => 'order_clause',
  'meta_query' => array(
       'order_clause' => array(
            'key' => 'order_in_archive',
            'value' => 'some_value',
            'type' => 'NUMERIC' // unless the field is not a number
)));

나를 위해 숫자 필드로 주문 'type' => 'NUMERIC'하고 메타 쿼리 내부에서 사용해야했습니다 .


1
명명 된 쿼리에서 굉장합니다!
Kaji

그러나 명명 된 쿼리도이 질문에 대한 답변을 제공합니다.
Dalton

우수한. 그 order_clause에서 'value'의 중요성이 확실하지 않습니다. 왜냐하면 'order_in_archive'의 가장 높은 값에서 가장 낮은 값으로 정렬하므로 필요하지 않기 때문입니다.
앤드류 슐츠

10

WP Codex는이 문제를 해결할 때 실제로 혼동됩니다.

orderby를 사용하기 위해 meta_query 매개 변수가 실제로 필요하지는 않지만 meta_key 매개 변수를 사용합니다. WP Codex는 더 이상 사용되지 않지만 여기에 설정되어 있습니다. Wordpress 3.1에서 meta_query와 함께 orderby를 어떻게 사용합니까? 그 orderyby는 여전히 meta_key가 필요합니다.

그래서 그것은

query_posts( array(
  'post_type' => 'services',
  'order' => 'ASC',
  'orderby' => 'meta_value',
  'meta_key' => 'order_in_archive'
) )

2
예, 이것은이 쿼리를 수행하는 오래된 방법 이며이 지정된 방법으로 작동하는 것으로 보입니다. 어쨌든 더 복잡한 쿼리의 경우 작동하지 않습니다. 나는 이것이 처리되고있는 알려진 문제라는 것을 발견했다. 세부 사항은 trac 티켓 #
15031

2

그것은 간단합니다:

내 코드는 다음과 같습니다.

query_posts(array( 
        'post_type' => 'directors',
        'posts_per_page' => -1,
        'order'    => 'ASC',
        'orderby'  => 'director_weight',
        'meta_key' => 'director_weight'
) );

주요 세부 사항은 다음과 같습니다 : include meta_key, meta_key포함 되지 않는 한 내 코드 는 주문하지 않았습니다 .

다음은 directors사진 목록의 전체 코드입니다 director_weight.

<?php 
    query_posts(array( 
        'post_type' => 'directors',
        'posts_per_page' => -1,
        'order'    => 'ASC',
        'orderby'  => 'director_weight',
        'meta_key' => 'director_weight'
    ) );
    while (have_posts()) : the_post();
?>  
    <li <?php echo get_field('director_weight') ?>>
        <img src="<?php echo get_field('director_imagen') ?>">
    </li>
<?php
    endwhile;
    wp_reset_query();
?>

order_by 사용자 정의 기분이 좋은 워드 프레스


1

query_posts를 사용하지 마십시오 .

$meta_query = new WP_Meta_Query( $meta_query_args );

$meta_query_args = array(
   'post_type' => 'services',
    'order'     => 'ASC',
    'meta_key' => 'your_key',
    'orderby'   => 'meta_value', //or 'meta_value_num'
    'meta_query' => array(
                    array('key' => 'order_in_archive',
                        'value' => 'some_value'
)));

사용 WP_Meta_Query 매개 변수를


0

나는 이것이 잘 작동한다는 것을 알았다.

<?php 
query_posts(
array(  'posts_per_page' => '-1',
        'post_type' => 'services',
        'order'     => 'DESC',
        'meta_key' => '_order',
        'orderby'   => 'meta_value_num', //or 'meta_value_num'
      )
);

3
문제는 새로운 meta_query매개 변수 orderby에 관한 것이며 이전 매개 변수는 아니지만 여전히 기능적 meta_key/ meta_value매개 변수에 관한 작업을 수행하는 것 입니다. 또한의 사용을 권장하지 않습니다 query_posts.
s_ha_dum

이 답변에는 -1 사용, 문자열로 전달, query_posts 사용과 같은 여러 가지 나쁜 사례가 포함되어 있습니다. 제거해야합니다.
Ihor Vorotnov

0

날짜를 기준으로 내림차순으로 정렬해야하는 맞춤 이벤트 날짜 집합이 있습니다. 내 맞춤 이벤트 날짜가 wp_postmeta 테이블에 저장되어 일반적으로 post_date 또는 수정 된 날짜와 다르기 때문에 다음과 같이 작동했습니다.

  $args = array(
    'post_type' => 'events', // my post type - yours can be 'posts'
    'post_status' => 'publish', // only get posts with this status
    'orderby' => 'meta_value', // orderby the meta_value of the following meta_key
    'meta_key' => 'my_custom_eventdate', // the custom meta_key name
    'order'=> 'DESC' // sort descending
  );

  $posts = new WP_Query($args);

그런 다음 $ posts를 반복 할 수 있습니다.

foreach($posts->posts as $p){

    $post_id = $p->ID;
    // and so on ...

    // # example of how I retrieve my event date
    $event = get_post_meta($post_id, 'my_custom_eventdate', true);
}

0

이것은 나를 위해 일합니다.

    $args = array(
        'post_type' => 'services',
        'order' => 'ASC',
        'orderby'   => 'order_clause',   
        'meta_query' => array(
        'order_clause' => array(
        'key' => 'order_in_archive'
    )));

order_clause의 키만 제공하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.