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:41] – 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: | ||
* **Manche AJAX-Aufrufe werden nicht als Suche interpretiert**. Dann bitte in der Methode '' | * **Manche AJAX-Aufrufe werden nicht als Suche interpretiert**. Dann bitte in der Methode '' | ||
- | * **get_posts() unterdrückt | + | * **get_posts() unterdrückt |
<code php> | <code php> | ||
<?php | <?php | ||
+ | |||
/* | /* | ||
HOOK FILTER IN SEARCH | HOOK FILTER IN SEARCH | ||
Line 33: | 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 45: | Line 51: | ||
add_filter( ' | add_filter( ' | ||
add_filter( ' | add_filter( ' | ||
- | //add_filter( ' | + | add_filter( ' |
} | } | ||
Line 123: | Line 129: | ||
} | } | ||
return $distinct_mode_string; | return $distinct_mode_string; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | /** | ||
+ | * | ||
+ | * | ||
+ | * @link https:// | ||
+ | */ | ||
+ | public function filter_results( $post_objects_array ) { | ||
+ | |||
+ | return $post_objects_array ; | ||
} | } | ||
Line 138: | 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 147: | Line 167: | ||
} | } | ||
- | $is_search = ( $is_flatsome_ajax_search | + | $is_search = ( ( $is_search_by_wpquery & !$is_admin & !$is_acf_call ) | $is_flatsome_ajax_search ) ? true : false; |
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; | ||
} | } | ||
} | } | ||
+ | |||
</ | </ |