2013-07-19 8 views
14

私は、ページ上の私のイベントを表示するには、カスタムループを使用して、私は以下を使用してイベントの開始日で、それ罰金順序を取得しています:複数のメタキーによる注文方法は?

$args = array( 
    'post_type' => 'event', 
    'order' => 'ASC', 
    'orderby' => 'meta_value', 
    'meta_key' => '_event_start_date'); 
$loop = new WP_Query($args); 

しかしmeta_keyオプションは、1つの値のみを許可します。 2つの値(_event_start_date_event_start_time)の使い方WP_Query documentationから

+0

私もそれを探していますが、私はWP4.0だけがこれを可能にすることを恐れています。私は3.9で成功せずにクエリパラメータのすべての可能な構成を試した... – Ninj

答えて

-1

meta_queryを使用して、メタキー/値の配列でいっぱい:

$args = array(
    'post_type' => 'product', 
    'meta_query' => array(
     array(
      'key' => 'color', 
      'value' => 'blue', 
      'compare' => 'NOT LIKE' 
     ), 
     array(
      'key' => 'price', 
      'value' => array(20, 100), 
      'type' => 'numeric', 
      'compare' => 'BETWEEN' 
     ) 
    ) 
); 
$query = new WP_Query($args); 
+3

しかし、それはそれを行うのに役立ちませんか? – user1280853

+0

[この検索クエリ](http://wordpress.stackexchange.com/search?q=meta_query+is%3Aanswer)を確認してください。 – brasofilo

+0

下記の私の答えは、複数のメタキーのクエリを使った順序付けに関して、これを明確にしています。 –

-1

あなたは複数の、一つのキーに注文することができます。これと同じように:

 $events = get_posts(array(
      'post_type' => 'my_event', 
      'post_status' => 'publish', 
      'meta_query' => array(
       array(
        'key' => 'my_event_type', 
        'value' => 'aGoodOne' 
       ), 

       array(
        'key' => 'my_event_start', 
        'value' => time(), // in this case, only grabbing upcoming events 
        'compare'=> '>', 
        'type' => 'NUMERIC' // assuming value is unix timestamp 
       ) 
      ), 
      'meta_key' => 'my_event_start', // we're sorting on the start time key 
      'orderby' => 'meta_value_num', // it's a numeric value 
      'order'  => 'ASC' // in chrono order 
     )); 

ここで重要なのは、どのキーmeta_key指定は、我々は我々がmeta_queryと当社の記録をつかむために使用するもので、によって発注していることです。

+8

これは役に立ちますが、元の質問には答えません。これは、「複数のメタキーで照会すると、どのように1つのメタキーで注文するのですか?何が尋ねられたのかは、「私は投稿を引っ張っていて、複数のメタキーを使って注文する必要がある」というものでした。 –

-1

add_action('pre_get_posts', 'pre_get_posts_programpunkter'); 
 

 
function pre_get_posts_programpunkter($query) { 
 
\t 
 
\t if(!is_admin() && is_post_type_archive('programpunkt') && $query->is_main_query()) { 
 
\t \t 
 
\t \t $query->set('orderby', 'meta_value'); 
 
\t \t $query->set('meta_key', 'event-date'); 
 
\t \t \t 
 
\t \t $query->set('meta_query', array(
 
\t \t \t 'relation' => 'AND', 
 
\t \t \t \t array('key' => 'event-date', 'compare' => 'EXISTS'), 
 
\t \t \t \t array('key' => 'event-start', 'compare' => 'EXISTS') 
 
\t \t \t) 
 
\t \t); 
 
\t \t \t 
 
\t \t $query->set('order', 'ASC'); 
 
\t \t \t \t 
 
\t } 
 
} 
 

 
add_filter('posts_orderby', 'programpunkter_orderby'); 
 

 
function programpunkter_orderby($orderby) { 
 
\t 
 
\t if(get_queried_object()->query_var === 'programpunkt') { 
 
\t \t 
 
\t \t global $wpdb; \t \t 
 
\t \t $orderby = str_replace($wpdb->prefix.'postmeta.meta_value', 'mt1.meta_value, mt2.meta_value', $orderby); \t 
 
\t \t 
 
\t } \t 
 
\t return $orderby; 
 
}

+0

これらのリンクが質問に答えるかもしれませんが、ここでは答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – matsjoyce

0

あなたは、誰もが言ったように、あなたのメタキーを追加meta_queryを使用する必要がありますが、また、あなたは関数で順序をカスタマイズする必要があります。

$args = array(
    'post_type' => 'event', 
    'meta_key' => '_event_start_date', 
    'meta_query' => array(
     array('key' => '_event_start_date'), 
     array('key' => '_event_start_time') 
    ), 
); 

add_filter('posts_orderby','customorderby'); 
$loop = new WP_Query($args); 
remove_filter('posts_orderby','customorderby'); 

そして、あなたのfunctions.phpに

function customorderby($orderby) { 
    return 'mt1.meta_value ASC, mt2.meta_value ASC'; 
} 

これを置くあなたはこれはWordPress 4.2でのサポートを追加したものですhttp://dotnordic.se/sorting-wordpress-posts-by-several-numeric-custom-fields/

7

で詳細を読むことができます:あなたはhttps://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

場合は、おそらくこのような何かをしたいでしょう:

$args = array(
    'post_type' => 'event', 
    'meta_query' => array(
     'relation' => 'AND', 
     'event_start_date_clause' => array(
      'key'  => '_event_start_date', 
      'compare' => 'EXISTS', 
     ), 
     'event_start_time_clause' => array(
      'key'  => '_event_start_time', 
      'compare' => 'EXISTS', 
     ), 
    ), 
    'orderby' => array(
     'event_start_date_clause' => 'ASC', 
     'event_start_time_clause' => 'ASC', 
    ), 
); 

$loop = new WP_Query($args); 
+0

私はこの解決策を選び、完璧に働いていたのと同じ状況にあった。ありがとう、それは私の一日を作った.. – Raajen

関連する問題