web-dev-qa-db-ja.com

カスタム項目のorderby meta_valueを持つカスタムクエリ

あなたが知っている、WP3.0の時点でカスタム高度なクエリのためのオプションがあります、それは素晴らしいです。現時点で、meta_key、meta_valueなどのカスタムフィールドのクエリパラメータは、新しいmeta_queryパラメータでは推奨されません( こちらを参照

私は新しいシンタックスを使ったかなり単純な問い合わせ、特定のmeta_key(order_in_archive)を含む特定のpost_type(services)による投稿の問い合わせをすることを試みます - これは予想通りうまくいきます。しかし - 私は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を試しましたが、いずれにせよ結果は公開日順に並べられています(通常の投稿がするように)。誰がこれをどのようにして行うことができるか知っていますか?

ありがとう

34
Maor Barazany

古いメソッドを使って 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'
                                )
                            )
    )
);
34
Ján Bočínec

この問題は一般的に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'を使わなければなりませんでした。

12
Ryan Taylor

それは簡単です:

これが私のコードです:

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

主な詳細は以下のとおりです。meta_keyを含めます。meta_keyが含まれていない限り、私のコードは順序付けされませんでした。それがすべてです。

これはdirector_weightによるdirectorsの写真順序のリストの完全なコードです:

<?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 custom fiel wordpress 

2
Jesus CMD

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パラメーターを使用します

1
Brad Dalton

降順で並べ替えるために必要なカスタムイベントの日付がありました。カスタムイベントの日付は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);

そうすると、$投稿をループすることができます。

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
recurse

この仕事は私のために

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

Order_clauseのキーを提供するためだけに必要

0
pingle60

私はこれが非常にうまくいくことがわかりました。

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