Benötigt meta_query numerische Werte, die in ganze Zahlen umgewandelt werden?

Beim Ziehen numerischer Daten (einer Zahl), die beim Bearbeiten einer Seite in post_meta gespeichert wurden – zum Beispiel:

$number = get_post_meta( $post->ID, 'number', true ); 

Und dann benutze diesen Wert mit get_posts in einer Meta-Abfrage – zum Beispiel:

 $args = array ( 'posts_per_page' => 4, // limit ## 'post_type' => 'post', 'post__not_in' => array ( $post->ID ), // exclude self ## 'meta_query' => array ( array ( 'key' => 'related_page', 'value' => $number, ) ), ); $posts = get_posts( $args ); 

Müssen wir zuerst den abgerufenen Wert als Ganzzahl jonglieren, da er scheinbar als String zurückgegeben wird:

var_dump($args) gibt:

 array(5) { ["posts_per_page"]=> int(4) ["post_type"]=> string(4) "post" ["post__not_in"]=> array(1) { [0]=> int(1387) } ["meta_query"]=> array(3) { [0]=> array(2) { ["key"]=> string(15) "related_page" ["value"]=> string(1) "10" } } } 

Soll ich die Werte mithilfe anderer benutzerdefinierter Feldeinstellungen wie “Vergleichen” oder “Typ” steuern?

Solutions Collecting From Web of "Benötigt meta_query numerische Werte, die in ganze Zahlen umgewandelt werden?"

Der Schlüssel und der Wert in der Postmeta-Tabelle sind technisch immer Strings. Selbst wenn Sie Ihre string in einen int würden, würde sie von der Abfrage in eine string werden. Versuchen:

 $args = array ( 'post_type' => 'post', 'meta_query' => array ( array ( 'key' => 'related_page', 'value' => 1, ) ), ); $posts = new WP_Query( $args ); var_dump($posts->request); 

Sie werden CAST(wp_postmeta.meta_value AS CHAR) = '1') in dieser Anfrage bemerken.

Sie müssen das Argument type , damit die Abfrage den Wert als Zahl behandelt. Selbst mit 'type' => 'NUMERIC' Sie feststellen, dass der Wert immer noch als String behandelt wird, aber von der Query umgewandelt wird – CAST(wp_postmeta.meta_value AS SIGNED) = '1') .

Und nichts davon wirkt sich auf die zurückgegebenen Daten aus. Versuchen:

 update_post_meta(1,'hal9000',1); var_dump(get_post_meta(1,'hal9000')); 

Setze eine Integerzahl ein und nimm eine Zeichenfolge zurück.

PHP ist sehr verzeihend über “type”, so dass es in vielen Fällen nicht wichtig ist, ob Sie eine string oder einen int . Der große Fall, in dem es wirklich zählt, ist das Sortieren. Oder, vielleicht, der Fall, der am meisten auf dieser Seite auftaucht. Sie müssen in einen Ganzzahl-Verwendungstyp umwandeln, wenn Sie die Abfrage sortieren müssen – oder die Sortierung erfolgt alphabetisch und nicht numerisch, die nicht immer ausgerichtet sind.