web-dev-qa-db-ja.com

複数のメタキーで注文するにはどうすればよいですか?

カスタムループを使用してページにイベントを表示しています。以下を使用して、イベントの開始日ごとに細かい順序で並べ替えています。

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

ただし、me​​ta_keyオプションでは1つの値しか使用できません。 2つの値の使用方法(_event_start_dateおよび_event_start_time)?

19
user1280853

これはWordPress 4.2でサポートが追加されたものです: 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 );
12
Wes Moberly

みんなが言ったように、メタキーを追加するときに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';
}

あなたは http://dotnordic.se/sorting-wordpress-posts-by-several-numeric-custom-fields/ でもっと読むことができます

0
Kiyan