Ich habe zuvor eine verwandte Frage gestellt, aber ich glaube, ich habe endlich den Kern meines Problems herausgefunden.
Ich verwende Erweiterte benutzerdefinierte Felder und habe eine Reihe benutzerdefinierter Felder an meinen Beitragstyp angehängt. Ich versuche, die URL so zu ändern, dass Posts über ihr benutzerdefiniertes Feld und ihren Wert empfangen werden.
Und ich komme ganz nah. Dies ist, was derzeit in meiner functions.php :
add_action('pre_get_posts', 'my_pre_get_posts');
function my_pre_get_posts( $query ) {
if( is_admin() ) { return; }
$meta_query = $query->get('meta_query'); // get original meta query
if( isset($_GET['type']) ) {
$type = '"' . $_GET['type'] . '"';
$meta_query[] = array(
'key' => 'type',
'value' => $type,
'compare' => 'LIKE',
);
}
$query->set('meta_query', $meta_query); // update the meta query args
return; // always return
}
Da ACF bei der Verarbeitung mehrerer Werte in benutzerdefinierten Feldern serialisierte Arrays verwendet, verwende ich die Abfrage LIKE
. Das benutzerdefinierte Feld type
akzeptiert tatsächlich mehrere Werte, und ich kann Beiträge von einer type
(d. H. Frauen) erfolgreich anzeigen.
website.com?type=women
Wenn Sie jedoch versuchen, mehrere type
abzurufen (z. B. Frauen, Männer, Jungen), funktioniert dies nicht.
website.com?type=women,men,boys
Jetzt ist mir klar, dass ich hier mit serialisierten Arrays arbeite und wenn ich mehrere type
abfragen möchte, müsste ich diese $type
-Variable explodieren, aber das scheint auch nicht zu funktionieren.
Wenn jemand helfen kann, bin ich verzweifelt nach einer Lösung. Vielen Dank!
BEARBEITEN | Mehrmals für jeden Typ:
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => 'type',
'value' => 'men',
),
array(
'key' => 'type',
'value' => 'women',
),
array(
'key' => 'type',
'value' => 'boys',
),
);
Ich habe gerade selbst herausgefunden, wie es geht
Schauen Sie sich dieses Beispiel an:
$args = array();
$args['relation'] = 'OR';
foreach ( $tag_ids as $t ) {
$args[] = array(
'key' => 'afz_entry_tags',
'value' => serialize( strval( $t->id ) ),
'compare' => 'LIKE'
);
}
$query->set( 'meta_query', $args );
Ich erhalte $tag_ids
mit einem normalen get_results
.
Dann erstelle ich das erste Element des Arrays für meta_query, um das OR zu definieren, das ich brauche.
Dann durchlaufe ich die Sammlung von Objekten, die ich von get_results erhalten habe, und erstelle so viele Arrays für die meta_query, wie ich brauche.
Es wirkt wie ein Zauber.
LIKE
akzeptiert keinen Array-Wert. Ihre Optionen sind wahrscheinlich:
OR
-Klausel benötigen.REGEXP
compare und fügen Sie mehrere Typen in reguläre Ausdrücke ein. Die Ausführung ist möglicherweise sehr langsam.