This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
programmieren:wordpress:nach_cutom_fields_suchen [2022/08/17 15:45] – jgehrke | programmieren:wordpress:nach_cutom_fields_suchen [2022/12/17 12:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Wordpress: Suche mit Custom Fields oder ACF Feldern ====== | ====== Wordpress: Suche mit Custom Fields oder ACF Feldern ====== | ||
- | Dies ist ein Beispiel wie man in der Wordpress | + | Dies ist ein Beispiel wie man in der Wordpress |
+ | |||
+ | Der Code Ursprung basiert auf diesem [[https:// | ||
+ | |||
+ | Zusätzlich ist noch ein Fix eingebaut, damit das Script auch Funktionen läuft, die WP Filter supressen. Lösung kam aus einem [[https:// | ||
__**Hinweise zur Nutzung: | __**Hinweise zur Nutzung: | ||
Line 10: | Line 14: | ||
<code php> | <code php> | ||
<?php | <?php | ||
+ | |||
/* | /* | ||
HOOK FILTER IN SEARCH | HOOK FILTER IN SEARCH | ||
*/ | */ | ||
- | |||
- | // diese Zeilen müssen nur 1x früh ausgeführt werden und dann geht die ACF Feld Suche bei jeder Wordpress-Suche | ||
$post_types = [ ' | $post_types = [ ' | ||
new SearchWithCustomFields( $post_types ); | new SearchWithCustomFields( $post_types ); | ||
Line 35: | Line 38: | ||
private $wp_filter_priority | private $wp_filter_priority | ||
+ | //private $acf_post_types | ||
private $limit_search_to_post_types = []; // wp_query » post_types | private $limit_search_to_post_types = []; // wp_query » post_types | ||
private $results_per_page | private $results_per_page | ||
Line 47: | Line 51: | ||
add_filter( ' | add_filter( ' | ||
add_filter( ' | add_filter( ' | ||
- | //add_filter( ' | + | add_filter( ' |
} | } | ||
Line 125: | Line 129: | ||
} | } | ||
return $distinct_mode_string; | return $distinct_mode_string; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | /** | ||
+ | * | ||
+ | * | ||
+ | * @link https:// | ||
+ | */ | ||
+ | public function filter_results( $post_objects_array ) { | ||
+ | |||
+ | return $post_objects_array ; | ||
} | } | ||
Line 140: | Line 156: | ||
{ | { | ||
$is_search_by_wpquery | $is_search_by_wpquery | ||
+ | $is_admin | ||
+ | $is_acf_call | ||
$is_flatsome_ajax_search = false; | $is_flatsome_ajax_search = false; | ||
Line 149: | Line 167: | ||
} | } | ||
- | $is_search = ( $is_search_by_wpquery | $is_flatsome_ajax_search ) ? true : false; | + | $is_search = ( ( $is_search_by_wpquery |
return $is_search; | return $is_search; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * | ||
+ | * | ||
+ | * Prüft ob die Suche durch ein ACF Query ausgelöst wurde | ||
+ | * | ||
+ | * ACF & die Beschränkung nach Post_Types vertägt sich nicht, weil | ||
+ | * ACF mit eigenen Posttypes kommt. Darum muss geprüft werden, dass | ||
+ | * keine Beschränkung in der Suche vorgenommen wird, wenn der call | ||
+ | * über ACF kommt. | ||
+ | * | ||
+ | * Bisher noch keine bessere Lösung gefunden, als den Callstack | ||
+ | * abzufragen. | ||
+ | * | ||
+ | * @return boolean [description] | ||
+ | */ | ||
+ | private function is_acf_call() | ||
+ | { | ||
+ | $backtrace | ||
+ | $is_acf_call = false; | ||
+ | foreach ($backtrace as $key => $stack) { | ||
+ | $is_acf_file | ||
+ | $is_acf_function = (strpos( $stack[" | ||
+ | |||
+ | if( $is_acf_file | $is_acf_function ){ | ||
+ | $is_acf_call = true; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return $is_acf_call; | ||
} | } | ||
} | } | ||
+ | |||
</ | </ |