Beliebige Nummer im Metaschlüssel (wp-Abfrage)

Ich habe eine solche Frage. Die Feldmodule _% _ text ist ein flexibles Feld für erweiterte benutzerdefinierte Felder, in dem% für jede beliebige Zeilennummer stehen soll, es scheint, dass es so funktionieren sollte, jedoch nicht. Was mache ich falsch? Vielleicht steht% nicht für irgendeine Zahl oder? Wenn ich modules_0_text betrete, bekomme ich das korrekte Feld.

... 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'price', 'value' => $_GET['searchword'], 'compare' => 'LIKE' ), array( 'key' => 'modules_%_text', 'value' => $_GET['searchword'], 'compare' => 'LIKE' ) ... 

AKTUALISIEREN:

 Here is my args: $args = array( 'post_type'=> 'custompost', 'meta_query' => array( 'relation' => 'AND', array('key' => 'modules_%_text','value' => $_GET['from'],'compare' => 'LIKE'), array('key' => 'modules_%_images','value' => $_GET['to'],'compare' => 'LIKE') ) ); 

Solutions Collecting From Web of "Beliebige Nummer im Metaschlüssel (wp-Abfrage)"

Sie müssen LIKE für den meta_key , um das SQL % -Muster zu unterstützen. Das compare gilt nur für den Metawert.

Stattdessen könnten Sie versuchen, es zu filtern mit:

 /** * Match any numbers in given a meta-key for WP_Query * * @see https://wordpress.stackexchange.com/a/177331/26350 */ ! is_admin() && add_filter( 'posts_where', function( $where ) { global $wpdb; // Replace the following meta key search: $find = $wpdb->postmeta . ".meta_key = 'modules_%_text'"; // with a LIKE search: //$to = $wpdb->postmeta . ".meta_key LIKE 'modules_%_text'"; // or a REGEXP search: $to = $wpdb->postmeta . ".meta_key REGEXP '^modules_[0-9]+_text$'"; // Replace: if( false !== stripos( $where, $find ) ) $where = str_ireplace( $find, $to, $where ); return $where; } ); 

Dies sollte Ihre Suche nach Metasprachen modifizieren von:

 wp_postmeta.meta_key = 'modules_%_text' 

zu

 wp_postmeta.meta_key LIKE 'modules_%_text' 

oder wenn Sie nur Zahlen im Metaschlüssel finden müssen:

 wp_postmeta.meta_key REGEXP '^modules_[0-9]+_text$' 

PS: Hier ist eine andere ähnliche Frage, die kürzlich gepostet wurde.

Aktualisieren:

Beantworten des Kommentars zu mehreren Ersetzungen:

 /** * Match any numbers in given array of meta-keys for WP_Query * * @see https://wordpress.stackexchange.com/a/177331/26350 */ ! is_admin() && add_filter( 'posts_where', function( $where ) { global $wpdb; // Replace the following meta keys: $a_find = [ $wpdb->postmeta . ".meta_key = 'modules_%_text'", $wpdb->postmeta . ".meta_key = 'modules_%_images'" ]; // with a LIKE search: //$a_to = [ // $wpdb->postmeta . ".meta_key LIKE 'modules_%_text'", // $wpdb->postmeta . ".meta_key LIKE 'modules_%_images'" //]; // or a REGEXP search: $a_to = [ $wpdb->postmeta . ".meta_key REGEXP '^modules_[0-9]+_text$'", $wpdb->postmeta . ".meta_key REGEXP '^modules_[0-9]+_images$'" ]; // Replace: return str_ireplace( $a_find, $a_to, $where ); } ); 

$a_find und $a_to Arrays gleicher Größe sind.