Filterung der ACF-Beziehungsfeldsuche
-
-
Anscheinend sucht die $ wpdb-Abfragenurnach Titeln.Siemüssten diese SQL-Anweisung ändern,um auchnach Taxonomien zu suchen.Schauen Sie sich die SQL-Anweisungin $ wpdb->prepare () an.Looks like the $wpdb query is only looking for titles. You would need to change that SQL statement to look for taxonomies as well. Look at the SQL statement inside $wpdb->prepare()
- 0
- 2015-02-18
- gdaniel
-
Eigentlich sucht der SQLbeide.Ich verwende diesen Code http://wordpress.stackexchange.com/questions/178484/wp-query-args-title-or-meta-value/178492#178492Actually the sql is searching both. I am using this code http://wordpress.stackexchange.com/questions/178484/wp-query-args-title-or-meta-value/178492#178492
- 0
- 2015-02-18
- Bryan
-
Ich denke,esist am Frontendmit JS,dassmeine Ergebnisseentfernt werden.I think it is on the front end with JS that my results are removed.
- 0
- 2015-02-18
- Bryan
-
Beachten Sie,dass dieseine von Natur austeure Abfrageist und sehr langsamist. Führen Sie diese Art von Abfragenichtim Frontend durchKeep in mind this is an inherently expensive query to make, and will be very slow, don't do this kind of query on the frontend
- 0
- 2016-09-01
- Tom J Nowell
-
1 Antworten
- Stimmen
-
- 2015-11-07
Lesen Sie zuerst diesen Beitrag,ummeine Antwort zu verstehen. Suche,diein benutzerdefinierten Feldern,Post-Titeln und Post-Inhalten angezeigt wird
Möglicherweisemöchten Siejedoch acf/fields/Relationship/query/verwenden,wenn Sie diefolgenden Argumente hinzufügen:
$args['meta_query'] = array(array( 'key' => 'your_meta', 'value' => $args['s'], 'compare' => 'LIKE', ));
Sie werdenfeststellen,dass Wordpressmit dieser Abfrage die Beiträge durchsucht,die Ihre Suchzeichenfolgeim Titel UNDim Metafeldenthalten.
Siemüssen alsoeinige Filter hinzufügen,damit diesfunktioniert:
function search_custom_meta_acf_add_join($joins) { global $wpdb; remove_filter('posts_join','search_custom_meta_acf_add_join'); return $joins . " INNER JOIN {$wpdb->postmeta} as CMS15 ON ({$wpdb->posts}.ID = CMS15.post_id)"; } function search_custom_meta_acf_alter_search($search,$qry) { global $wpdb; remove_filter('posts_search','search_custom_meta_acf_alter_search',1,2); $add = $wpdb->prepare("(CMS15.meta_key = 'your_field_name' AND CAST(CMS15.meta_value AS CHAR) LIKE '%%%s%%')",$qry->get('s')); $pat = '|\(\((.+)\)\)|'; $search = preg_replace($pat,'(($1 OR '.$add.'))',$search); return $search; } function modify_acf_relationship_search_query ($args, $field, $post ) { add_filter('posts_join','search_custom_meta_acf_add_join'); add_filter('posts_search','search_custom_meta_acf_alter_search',1,2); return $args; } add_filter('acf/fields/relationship/query/name=your_field_name', 'modify_acf_relationship_search_query', 10, 3);
Mit diesem Code wirdim Wesentlichen die Abfragegeändert,mit der die Beiträge durchsucht werden,da ACF diein WordPressintegrierte Suchfunktionfür die Sucheim Beziehungsfeld verwendet. Siemüssen sich keine Gedanken über die Filtermachen,die die Suchabfrage ändern,da sie sichbei Verwendung selbstentfernen.
Laut Antwort,dieich oben zitiert habe ,er verwendet keinenbenutzerdefinierten Tabellennamenim inneren Join,aberich habe diesgetan,was keine Probleme verursacht,wenn Sie weiterhin den Parameter $ args ['meta_query']für a verwendenmöchten verfeinerte Filterung.
First, read this post to understand my answer Search that will look in custom field, post title and post content
You may want to use the acf/fields/relationship/query/ however, when adding the args:
$args['meta_query'] = array(array( 'key' => 'your_meta', 'value' => $args['s'], 'compare' => 'LIKE', ));
you will find that using that query, Wordpress will search the posts that contains your search string in the title AND in the meta field.
So you have to add a couple of filters to make this works:
function search_custom_meta_acf_add_join($joins) { global $wpdb; remove_filter('posts_join','search_custom_meta_acf_add_join'); return $joins . " INNER JOIN {$wpdb->postmeta} as CMS15 ON ({$wpdb->posts}.ID = CMS15.post_id)"; } function search_custom_meta_acf_alter_search($search,$qry) { global $wpdb; remove_filter('posts_search','search_custom_meta_acf_alter_search',1,2); $add = $wpdb->prepare("(CMS15.meta_key = 'your_field_name' AND CAST(CMS15.meta_value AS CHAR) LIKE '%%%s%%')",$qry->get('s')); $pat = '|\(\((.+)\)\)|'; $search = preg_replace($pat,'(($1 OR '.$add.'))',$search); return $search; } function modify_acf_relationship_search_query ($args, $field, $post ) { add_filter('posts_join','search_custom_meta_acf_add_join'); add_filter('posts_search','search_custom_meta_acf_alter_search',1,2); return $args; } add_filter('acf/fields/relationship/query/name=your_field_name', 'modify_acf_relationship_search_query', 10, 3);
What this code does is, basically, to modify the Query that searches the posts since ACF uses the wordpress built-in search functionality for searching in the relationship field. You don't have to worry about the filters that modifies the search query because they remove themselves when used.
According to the answer I cited above, he doesn't use a custom table name in the inner join but I did so it doesn't cause any trouble if you still want to use the $args['meta_query'] parameter for a more refined filtering.
Ich versuche,über das Feld ACF-Beziehung verwandte Beiträge zuzuweisen.Es hat Typeahead-Suche,umnach Post-Titeln zu suchen.
Ichmöchte der ACF-Beziehungssuche die Suchenach Metadaten hinzufügen.
Diese Frage hatmeine Anfrageerhaltenfunktioniert ordnungsgemäß,aber das Suchfeld zeigtimmernoch an,dass keine Ergebnisse vorliegen.
Ich denke,dass der Typeahead Ergebnisseentfernt,da der Typeaheadnurmit dem Titel übereinstimmt.
Haben Sie Ideen,wie Sie diesbearbeiten können,damit Metadatenin den Suchergebnissen zurückgegeben werden können?