Abfragen von Beiträgen mit Metaschlüssel und Metawert, die nichts zurückgeben

Ich versuche eine Abfrage zu erstellen, die Seiten mit einem bestimmten Metawert zurückgibt.

Nur meta_key funktioniert es nicht, wenn ich sowohl meta_key als auch meta_value .

Ich weiß, dass der meta_value korrekt ist – ich habe mehrfach meta_value . Ich benutze das Plugin für benutzerdefinierte Felder und habe den Namen, den Wert und sogar das Kopieren versucht, indem ich den Wert eingefügt habe. Es kann also nicht nur sein, dass ich den falschen Wert verwende.

Jede Hilfe wird sehr geschätzt!

Hier ist meine Frage:

 $skolor_query = new WP_Query(array( 'post_type' => 'page', 'meta_key' => 'program_skola', 'meta_value' => 'es' )); if ($skolor_query->have_posts()) { ?> 
    have_posts() ) : $skolor_query->the_post(); $skola = get_the_title(); ?>

Hier ist das benutzerdefinierte Feld: Benutzerdefinierte Feld

 $q = new WP_Query( $args ); if ( $q->have_posts() ) { while ( $q->have_posts() ) { $q->the_post(); ?>

<?php } wp_reset_postdata(); }

Kehrt zurück:

 array (size=1) 0 => array (size=2) 0 => string 'sp' (length=2) 1 => string 'tp' (length=2) array (size=1) 0 => array (size=3) 0 => string 'ek' (length=2) 1 => string 'es' (length=2) 2 => string 'nv' (length=2) array (size=1) 0 => array (size=5) 0 => string 'ek' (length=2) 1 => string 'es' (length=2) 2 => string 'nv' (length=2) 3 => string 'sp' (length=2) 4 => string 'tp' (length=2) 

Solutions Collecting From Web of "Abfragen von Beiträgen mit Metaschlüssel und Metawert, die nichts zurückgeben"

Ich bin immer noch nicht wirklich sicher, wie die Werte von Ihrem benutzerdefinierten Feld in der database gespeichert werden, aber Ihr Format in DB stimmt nicht mit dem Format überein, das Sie von meta_value . Aus Ihrem Bild scheint es, dass Sie 5 Werte unter einem benutzerdefinierten Feld oder in dem Format von es: xxxxxx das niemals explizit mit es übereinstimmt

Führen Sie die folgende Abfrage aus, und notieren Sie die Ausgabe von Ihrem benutzerdefinierten Feld, um das zu debuggen oder um wirklich sicher zu sein, wie Ihre Werte gespeichert werden. Du solltest es dann von dort nehmen

 $args = [ 'post_type' => 'page', 'meta_key' => 'program_skola' ]; $q = new WP_Query( $args ); if ( $q->have_posts() ) { while ( $q->have_posts() ) { $q->the_post(); ?>
< ?php var_dump( get_post_meta( get_the_ID(), 'program_skola' ) ); ?>

< ?php } wp_reset_postdata(); }

BEARBEITEN

Von Ihrer var_dump() von get_post_meta() :

 array (size=5) 0 => string 'ek' (length=2) 1 => string 'es' (length=2) 2 => string 'nv' (length=2) 3 => string 'sp' (length=2) 4 => string 'tp' (length=2) 

Dies ist ein Array von Werten, das als benutzerdefinierter Feldeinzelwert gespeichert wird. Es ist traurig zu sagen, aber wenn Sie benutzerdefinierte Felddaten zum Sortieren oder zum Suchen der functionalität benötigen, können Sie keine serialisierten Daten verwenden ( Werte, die als Arrays gespeichert werden, bevor sie gespeichert werden ), da es nie funktioniert ( wie Sie gesehen haben ). Im Allgemeinen und für den Ansatz "Keine Probleme in der Zukunft" sollte ein benutzerdefiniertes Feld verwendet werden, um nur einen einzelnen Wert für Such- und Bestellzwecke zu speichern

Sie sollten nach einem benutzerdefinierten Feld für jeden einzelnen Wert suchen und dann Werte wie 0 und 1 als Auslöser verwenden. Zum Beispiel kann ein Beitrag ein Feld es mit einem Wert von entweder 0 oder no oder einem Wert von 1 oder yes . Die anderen benutzerdefinierten Felder werden je nach Bedarf ek , nv usw. sein, jedes Feld mit dem beschriebenen Wert. Wenn Sie Posts mit einem benutzerdefinierten Feld von es abfragen müssen und das als 1 markiert wurde ( was bedeutet, dass der Kurs, wie ich sehen kann, benötigt wird ), können Sie ihn wie folgt abfragen

 $args = [ 'post_type' => 'page', 'meta_key' => 'es', 'meta_value' => 1 ]; $q = new WP_Query( $args ); if ( $q->have_posts() ) { while ( $q->have_posts() ) { $q->the_post(); the_title(); } wp_reset_postdata(); } 

Was Ihr aktuelles Setup betrifft, ist das Einzige, was ich schnell herausfinden kann, folgendes

 $args = [ 'post_type' => 'page', 'meta_key' => 'program_skola' ]; $q = new WP_Query( $args ); if ( $q->have_posts() ) { while ( $q->have_posts() ) { $q->the_post(); $meta = get_post_meta( get_the_ID(), 'program_skola' ) ); if ( in_array( 'es', $meta ) ) { // Display posts with value 'es' the_title(); } } wp_reset_postdata(); } 

Es sollte angemerkt werden, dass dies nicht sehr gut für die Performance ist, da Sie nicht benötigte Posts abfragen, was Zeit und DB-Aufrufe verschwendet