it-swarm.com.de

ORDER BY benutzerdefinierter Feldwert

Basierend auf dem Beispiel hier https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

Ich möchte die Abfrage ändern

$q = new WP_Query( array(
'meta_query' => array(
    'relation' => 'AND',
    'state_clause' => array(
        'key' => 'state',
        'value' => 'Wisconsin',
    ),
    'city_clause' => array(
        'key' => 'city',
        'compare' => 'EXISTS',
    ), 
),
'orderby' => 'city_clause') );

in der Lage zu sein, alle Beiträge zu erhalten, bei denen state 'Wisconsin' OR timezone 'central' ist ORDER BY population DESC

4
dkatwp

Sie können Gruppen von meta_queries erstellen, indem Sie eine bestimmte Vergleichsoperation für sie ausführen. Da Sie in einem einzelnen benutzerdefinierten Feld bestellen möchten, können Sie die Bestelldeklaration für das einzelne Metafeld beibehalten. So:

$q = new WP_Query( 
    array(
        'meta_key' => 'population', //setting the meta_key which will be used to order
        'orderby' => 'meta_value', //if the meta_key (population) is numeric use meta_value_num instead
        'order' => 'DESC', //setting order direction
        'meta_query' => array(
            'relation' => 'AND', //setting relation between queries group
            array(
                'relation' => 'OR', //setting relation between this inside query
                array(
                    'key' => 'state',
                    'value' => 'Wisconsin',
                ),
                array(
                    'key' => 'timezone',
                    'value' => 'central',
                )
            ),
            array(
                'key' => 'city',
                'compare' => 'EXISTS',
            )
        )
    )           
);
8
Bruno Cantuaria

Dies würde folgendermaßen geschehen:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'relation' => 'OR',
            'state_clause' => array(
                'key' => 'state',
                'value' => array( 'Wisconsin' ), //allowed values
                'compare' => 'IN' // state must be in array above
            ),
            'state_clause' => array(
                'key' => 'timezone',
                'value' => 'central',
                'compare' => '='
            ),
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => array(
        'city_clause' => 'DESC',
    ),
) );
1
fischi