WP-Abfrage-Post-Metawert

Ich versuche, Beiträge zu erhalten, die den Meta-Wert- trainees angewendet haben.

 $args = array( 'posts_per_page' => -1, 'orderby' => 'post_date', 'order' => 'DESC', 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'enterprise_on_page', 'value' => array( 'trainees' ), 'compare' => 'IN', ), ), ); $enterprise_posts = get_posts( $args ); 

In meinem Meta-Feld mit dem Schlüssel enterprise_on_page habe ich vorher ein Array () gespeichert wie update_post_meta( $post_id, 'enterprise_on_page', array('trainees', 'staff') ); .

Wenn ich var_dump(get_post_meta($post->ID)) ich folgende Ausgabe:

 'enterprise_on_page' => array (size=1) 0 => string 'a:2:{i:0;s:8:"trainees";i:1;s:7:"staff";}' 

Wie kann ich meine Abfrage ändern, so dass nur Beiträge mit Meta-Wert trainees angezeigt werden. Inzwischen bekomme ich keine Posts.

Solutions Collecting From Web of "WP-Abfrage-Post-Metawert"

Danke an @Howdy_McGee. Er gab mir den Hinweis, nach serialisierten Meta-Abfragen zu suchen. Mit diesem Code bekomme ich das gewünschte Ergebnis.

 $args = array( 'posts_per_page' => -1, 'orderby' => 'post_date', 'order' => 'DESC', 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'enterprise_on_page', 'value' => serialize(strval('trainees')), 'compare' => 'LIKE', ), ), ); $enterprise_posts = get_posts( $args ); 

Da Ihre Daten derzeit strukturiert sind, können Sie dazu keine SQL verwenden (zumindest nicht performant). Sie haben zwei Möglichkeiten:

  1. Hole ALLE Posts und durchlaufe sie im Speicher nach dem richtigen Post-Meta oder
  2. Speichern Sie die Metawerte separat.

Zwischen den beiden empfehle ich letzteres. Mit WordPress können Sie mehrere Zeilen desselben Post-Metas für einen einzigen Post speichern, so dass Sie ein Array von Daten erhalten, ohne es serialisieren und in einem Schlüssel speichern zu müssen. Um dies zu tun, müssen Sie die Art der Interaktion mit der Post-Meta-API hier etwas ändern. So etwas möchtest du haben:

Wenn du das Post-Meta bekommst, würdest du tun

get_post_meta($ID, 'enterprise_on_page', false);

Aktualisierung wäre am unterschiedlichsten. Wenn Sie nur einen Wert anhängen möchten, tun Sie

add_post_meta($ID, 'enterprise_on_page', $value);

Um einen Wert zu aktualisieren,

update_post_meta($ID, 'enterprise_on_page', $new_value, $old_value);

Und um einen Wert zu entfernen:

delete_post_meta($ID, 'enterprise_on_page', $value_to_delete);

Ich glaube nicht, dass Sie Werte für ein serialisiertes Array genau vergleichen können, was immer dann passiert, wenn Sie ein Array an update_post_meta . Sie müssen den gesamten Wert während der Schleife mit verwenden

get_post_meta( $post->ID, 'enterprise_on_page', 1 )

Wenn Sie Abfragen basierend auf diesen Werten angeben müssen, speichern Sie sie am besten separat.

Sehen Sie sich diese Frage an, um weitere Informationen zu erhalten:

meta_query mit Metawerten als serialisierte Arrays