20

カスタムループを使用してページにイベントを表示しています。以下を使用して、イベントの開始日までにうまく順序付けできます。

$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) を使用するには?

4

5 に答える 5

20

これは、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 );
于 2016-02-20T00:50:31.363 に答える
1

誰もが言ったように、メタキーを追加するときに 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/をご覧ください。

于 2015-11-23T13:04:16.237 に答える
-1

  add_action( 'pre_get_posts', 'pre_get_posts_programpunkter' );

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

add_filter('posts_orderby', 'programpunkter_orderby');

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

于 2015-02-13T19:36:45.660 に答える
-1

WP_Query documentationから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 );
于 2013-07-19T12:24:27.463 に答える