Analysiere Abfragefilter in WordPress und Relation

Ich habe diesen Code im Filter backend.Three Filter sind da. Jeder arbeitet getrennt gut. aber wenn ich alle Filter gleichzeitig laufe, gibt es ein “OR” Ergebnis. Ich muss alle drei Filter “AND” machen

add_filter( 'parse_query', 'wpse45436_posts_filter' ); function wpse45436_posts_filter( $query ){ global $pagenow; $type = 'lessons'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'lessons' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['age_band']) && $_GET['age_band'] != '') { // die("here"); $query->query_vars['meta_key'] = 'dt_age_group'; $query->query_vars['meta_value'] = $_GET['age_band']; } } add_filter( 'parse_query', 'wpse45437_posts_filter' ); function wpse45437_posts_filter( $query ){ global $pagenow; $type = 'lessons'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'lessons' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['module_no']) && $_GET['module_no'] != '') { $ar = array("A"=>"4-5","B"=>"6-7","C"=>"8-9","D"=>"10-11","E"=>"12-13","F"=>"14-15"); $ar = array_flip($ar); $chr = array("A","B","C","D","E","F"); $mod_no = $_GET['module_no']; if ( 'lessons' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['age_band']) && $_GET['age_band'] != '') { // die("here"); $mod_no = $mod_no.$ar[$_GET['age_band']]; } $query->query_vars['meta_key'] = 'dt_module_no'; $query->query_vars['meta_value'] = $mod_no; $query->query_vars['meta_compare'] = 'LIKE'; } } add_filter( 'parse_query', 'wpse45438_posts_filter' ); function wpse45438_posts_filter( $query ){ global $pagenow; $type = 'lessons'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'lessons' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['lesson_no']) && $_GET['lesson_no'] != '') { // die("here"); $query->query_vars['meta_key'] = 'dt_lesson_no'; $query->query_vars['meta_value'] = $_GET['lesson_no']; $query->query_vars['meta_relation'] = 'AND'; } } 

Solutions Collecting From Web of "Analysiere Abfragefilter in WordPress und Relation"

Da Sie mehrere Meta-Schlüssel abfragen, sollten Sie Ihre Meta-Schlüssel-Abfragen in einem Array ablegen. Ein gutes Beispiel ist diese Veröffentlichung auf StackExchange .

Für jede Ihrer functionen sollten Sie die letzten drei Zeilen ersetzen, in denen Sie ['meta_key'] , ['meta_value'] und ['meta_relation'] mit etwas wie diesem setzen:

 if( ! isset($query->query_vars['meta_query']) ) { $query->query_vars['meta_query'] = array(); } // setup this functions meta values $meta = array ( 'key' => 'dt_module_no', 'value' => $mod_no, 'compare' => 'LIKE' ); // append to meta_query array $query->query_vars['meta_query'][] = $meta; 

Standardmäßig wird jedes Array in der Meta-Abfrage in der Abfrage UND-verknüpft.

Dieser Code wurde nicht getestet.