Verwenden von posts_where für Metadaten auf pre_get_posts

pre_get_posts , Sie haben einen Code, der Beiträge mit pre_get_posts

z.B

 add_action( 'pre_get_posts', 'be_exclude_category_from_blog' ); function be_exclude_category_from_blog( $query ) { if( $query->is_main_query() && $query->is_home() ) { $query->set( 'cat', '-4' ); } } 

Ich habe ein nettes Stück Code gefunden, mit dem Sie diese Beiträge auf die letzten 90 Tage weiter filtern können:

 add_action( 'pre_get_posts', 'be_exclude_category_from_blog' ); function be_exclude_category_from_blog( $query ) { if( $query->is_main_query() && $query->is_home() ) { add_filter( 'posts_where', 'filter_date' ); $query->set( 'cat', '-4' ); } } function filter_date( $where = '' ) { $where .= " AND post_date > '" . date('Ym-d', strtotime('-90 days')) . "'"; return $where; } 

Das funktioniert wirklich gut. Aber was, wenn ich die gleiche Methode verwenden möchte, um die Metadaten eines Beitrags anstatt nur post_date anzusprechen? Ist das möglich? Aus dieser Antwort sieht es so aus, als ob Sie so etwas tun sollten:

 add_action( 'pre_get_posts', 'be_exclude_category_from_blog' ); function be_exclude_category_from_blog( $query ) { if( $query->is_main_query() && $query->is_home() ) { add_filter( 'posts_where', 'filter_date' ); $query->set( 'cat', '-4' ); } } function filter_date( $where = '' ) { global $wpdb; $where .= " AND ($wpdb->postmeta.meta_key = '_length' AND $wpdb->postmeta.meta_value = '61')"; return $where; } 

Dies funktioniert jedoch nicht für mich, es gibt keine Ergebnisse. Obwohl ich weiß, dass es Posts mit einem _length von _length mit einem Wert von 61 .

Könnte mir jemand in die richtige Richtung zeigen?

Prost

Solutions Collecting From Web of "Verwenden von posts_where für Metadaten auf pre_get_posts"

Ich bezweifle, dass das jemals alleine funktioniert hat. WP_Query arbeitet mit der Posts-databasetabelle. Auf der untersten SQL-Ebene, um Post-Metadaten zu verwenden, müssen Sie nicht nur angeben, welche Metadaten Sie suchen, sondern MySQL auch instruieren, wie die Metadatentabelle eine Verbindung zu Ihrer Post-Tabelle herstellt ( JOIN Bereich).

Ich würde versuchen, die Argumente für Starters zu manipulieren, es scheint nicht, dass Ihre Bedingungen so kompliziert sind (von dem, was Sie mindestens zitiert).

PS vergessen Sie auch nicht, Ihre Filter nach zu entfernen, oder Sie verwirren andere Fragen.