カスタムフィールドのorderby meta_valueを使用したカスタムクエリ


37

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を試しましたが、いずれの場合も、結果は公開日順に並べられています(通常の投稿と同様)。誰もこれをどのように行うことができますか?

ありがとう

回答:


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
名前付きクエリで素晴らしい検索!
カジ

はい、名前付きクエリも私のために質問に答えました。
ダルトン

優れた。「order_in_archive」の最高値から最低値で並べ替えるので、order_clauseの「value」の重要性はわかりません。
アンドリューシュルツ

10

WP Codexは、この問題に対処するときに実際に混乱を招きます。

実際には、orderbyを使用するためにmeta_query paramは必要ありません。代わりにmeta_key param を使用します。そのorderybyにはまだmeta_keyが必要です。

だからそれは

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

2
ええ、はい、これはこのクエリを実行するための古い方法であり、この指定されたクエリで機能しているようです。とにかく、より複雑なクエリでは機能しません。私は、これは、詳細はTracのチケットに記載されていますの世話をされている既知の問題で見つけ#15031#17065
Maor Barazanyを

2

それは簡単です:

ここに私のコードがあります:

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

主な詳細は次のとおりです:include meta_keymeta_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カスタムフィールワードプレス



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を使用します。削除する必要があります。
イホルボロトノフ

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.