Filtraggio ricerca campo relazione ACF
-
-
Sembra che la query $ wpdb cerchi solotitoli.Dovresti cambiare quell'istruzione SQLper cercare anche letassonomie.Guarda l'istruzione SQL all'interno di $ wpdb->prepare ()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
-
In realtà lo sql sta cercandoentrambi.Sto usando questo codice 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
-
Penso che sia sulfront-end con JS chei miei risultati vengono rimossi.I think it is on the front end with JS that my results are removed.
- 0
- 2015-02-18
- Bryan
-
Tienipresente che questa è una queryintrinsecamente costosa dafaree saràmolto lenta,nonfare questotipo di query sulfrontendKeep 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 risposta
- voti
-
- 2015-11-07
Perprima cosa,leggi questopostper capire lamia risposta Ricerca che cercherànel campopersonalizzato,neltitolo delposte nel contenuto delpost
Tuttavia,potresti voler utilizzare acf/fields/relationship/query/quando aggiungigli argomenti:
$args['meta_query'] = array(array( 'key' => 'your_meta', 'value' => $args['s'], 'compare' => 'LIKE', ));
scoprirai che utilizzando quella query,Wordpress cercherài post che contengono latua stringa di ricercaneltitolo Enel campometa.
Quindi devi aggiungere unpaio difiltriperfarlofunzionare:
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);
Ciò chefa questo codice è,fondamentalmente,modificare la query che cercai postpoiché ACF utilizza lafunzionalità di ricercaincorporata di wordpressper la ricercanel campo della relazione. Non devipreoccuparti deifiltri chemodificano la query di ricercaperché si rimuovono da soli quando vengono utilizzati.
Secondoil risposta che ho citato sopra ,non usa unnome ditabellapersonalizzatonell'innerjoinma l'hofattoin modo danon causare alcunproblema se vuoi ancora utilizzareilparametro $ args ['meta_query']per unfiltripiù raffinati.
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.
Sto cercando di assegnarepost correlati utilizzandoil campo della relazione ACF.Ha la ricerca ditestataper cercarepertitolo deipost.
Vorrei aggiungere la ricercameta_data alla ricerca di relazioni ACF.
Questa domanda ha ottenuto lamia domandafunziona correttamente,mail campo di ricerca dice ancora chenon ci sono risultati.
Penso cheiltypeahead rimuovai risultatiperchéiltypeahead corrisponde solo altitolo.
Qualcheidea su comemodificare questoper consentire la restituzione deimetadatinei risultati di ricerca?