it-swarm.com.de

Wie sortiere ich nach Metawerten?

Wie kann ich nach Metawerten sortieren? In Meta-Wert habe ich "Preis" (float).

Ich mache diese Abfrage, bekomme aber immer

Verzeihung, keine Artikel passen auf deine Kriterien.

$posts = query_posts( $query_string . '&orderby=meta_value_num&meta_key=Notes&meta_value_num=price&order=ASC');

Bearbeiten:

meta_value value:
"a:6:{s:5:"width";s:3:"580";s:6:"**price**";s:3:"99"".

Ist es möglich?

1
user319854

Ihr Metawert ist ein serialisiertes Array.

Was Sie von ihm verlangen, sind alle Posts mit einem Meta mit dem Schlüssel 'Notes' und dem Wert 'price'. Ihr Metawert ist jedoch nicht 'price'

a:6:{s:5:"width";s:3:"580";s:6:"price";s:3:"99"

Das erste, was Sie tun müssen, um nach Preis zu bestellen, ist, eine hilfreiche Schlüssel-/Wertstruktur zu verwenden. Ich gehe davon aus, dass Sie so etwas verwenden, um das Post-Meta zu speichern:

update_post_meta( $post_id, 'foobar', array( 'width' => 580, 'price' => 99 ), true );

wenn Ihre Bedürfnisse darauf hindeuten, dass Sie so etwas tun müssen:

update_post_meta( $post_id, 'width', 580, true );
update_post_meta( $post_id, 'price', 99, true );

Sobald Sie Ihre Meta-Werte in diesem Format gespeichert haben, möchten Sie einen meta_query verwenden:

global $query_string;
parse_str( $query_string, $my_query );
$my_query['meta_query'] = array(
    array(
         'key' => 'price',
         'value' => 0,
         'type' => 'SIGNED',
         'compare' => '>=',
    )
);
$my_query['orderby'] = 'meta_value_num';
$my_query['order'] = 'ASC';
query_posts( $my_query );

Meta-Abfragen sind neu in WordPress 3.1, daher müssen Sie mindestens diese Version verwenden, um dies zu tun.

Lassen Sie mich wissen, wenn Sie auf Probleme stoßen!

5
John P Bloch

Vielleicht kann diese Lösung Ihnen helfen, ich musste die Posts bei jeder Anfrage nach meta_key und meta_value sortieren, also habe ich einen Filter auf diese Weise erstellt:

/**
* Filter for every the loop request
* 
* @param mixed $request
*/
function request( $request ) {
    $option = $_REQUEST['mysortoption'] ? $_REQUEST['mysortoption'] : 'default';

    switch ( strtolower($option) ) {
        case 'most-viewed':
            $request['meta_key'] = 'most-viewed';
            $request['orderby'] = "meta_value";
            break;
        case 'hot':
            $request['orderby'] = 'comment_count';
            break;
        default:
            break;
    }

    return $request;
}
add_filter('request', 'request');

Ok, diese Lösung ist Teil einer großen Anforderung, aber wir fangen hier nur jede Anfrage ab. Stellen Sie sicher, dass es eine spezielle Sortieroption gibt, die ich zuvor hinzugefügt habe, und wenden Sie die entsprechende Sortierung nach Meta an.

Hoffe das hilft dir.

1
Mario