Ich habe einen benutzerdefinierten Beitragstyp "Listing" und möchte alle Listings mit einem benutzerdefinierten Feld abrufen gateway_value != 'Yes'
und die Ergebnisse nach einem anderen benutzerdefinierten Feld sortieren location_level1_value
. Ich kann die Abfragen separat arbeiten lassen, aber ich kann sie nicht kombinieren:
Abfrage 1 (nach Standort sortieren):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => '9',
'meta_key' => 'location_level1_value',
'orderby' => 'location_level1_value',
'order' => 'ASC',
'paged' => $paged
)
);
Abfrage 2 (benutzerdefinierter Feldwert! = Ja):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_key' => 'gateway_value',
'meta_value' => 'Yes',
'meta_compare' => '!=',
'paged' => $paged
)
);
Kombinierte Abfrage:
Ich habe im Codex nach Hilfe gesucht , aber die folgende Abfrage funktioniert nicht:
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'gateway_value',
'value' => 'Yes',
'compare' => '!='
),
array(
'key' => 'location_level1_value'
)
),
'orderby' => "location_level1_value",
'order' => 'ASC',
'paged' => $paged
)
);
Was mache ich mit der kombinierten Abfrage falsch?
[UPDATE]: Nachdem 3.1 veröffentlicht wurde, funktioniert die oben genannte kombinierte Abfrage immer noch nicht. Ich bekomme Ergebnisse, nur nicht richtig sortiert.
[UPDATE]: var_dump($wp_query->request)
gibt Folgendes an:
string(527) " SELECT SQL_CALC_FOUND_ROWS wp_7v1oev_posts.* FROM wp_7v1oev_posts
INNER JOIN wp_7v1oev_postmeta ON (wp_7v1oev_posts.ID = wp_7v1oev_postmeta.post_id)
INNER JOIN wp_7v1oev_postmeta AS mt1 ON (wp_7v1oev_posts.ID = mt1.post_id) WHERE 1=1 AND wp_7v1oev_posts.post_type = 'listing' AND (wp_7v1oev_posts.post_status = 'publish') AND wp_7v1oev_postmeta.meta_key = 'gateway_value' AND CAST(wp_7v1oev_postmeta.meta_value AS CHAR) != 'Yes' AND mt1.meta_key = 'location_level1_value' ORDER BY wp_7v1oev_posts.post_date DESC LIMIT 0, 9"
quelle
meta_query
Parameter ist neu in 3.1 und wird sehr bald veröffentlicht, aber die aktuelle stabile Version ist immer noch 3.0.5 ohne diesen Parameter.Antworten:
Sie können die Abfrage verwenden, um den Inhalt wie beabsichtigt zu filtern, indem Sie die 'meta_query' mit Filteroptionen verwenden. Fügen Sie für den Auftragsteil einfach die folgenden Parameter hinzu / ändern Sie sie:
'order' => 'ASC'
quelle
Genau wie Jan in neuem WordPress 3.1 gesagt hat, können Sie es verwenden,
meta_query
aber bis dies herauskommt, können Sie Ihre erste Abfrage verwenden, um in Ihrer Schleife wie folgt zu bestellen und zu filtern:und fügen Sie diesen Code Ihrer functions.php hinzu
jetzt sollte das funktionieren.
quelle
gateway_value == "Yes"
ohne die Bedingung gewesen wären ... Haben Sie eine Idee, wie Sie das beheben können?Entschuldigung für die Beantwortung meiner eigenen Frage:
Ein Blick auf [http://core.trac.wordpress.org/ticket/15031 weibl. [1] scheint ein bekanntes Problem zu sein. Ich habe es behoben (gehackt?)
post_filter
, Um es so zu verwenden (nur als Referenz für jeden, der nach der gleichen Antwort sucht):In functions.php ###
Geänderte wp_query in Vorlagendatei ###
quelle