Je l'avais demandé plus tôt et je l'avais résolu en utilisant le plugin Relevanssi . Cependant, ce plugin est en train de casser des choses, donc je ne peux plus l'utiliser. Comment quelque chose de si simple peut-il être rendu impossible par woocommerce? AAARG!
J'ai essayé d'utiliser cette solution , mais cela ne semblait pas fonctionner pour moi. J'ai également essayé de rechercher la fonction woocommerce product_search
et d'y ajouter un filtre, mais je n'ai rien trouvé non plus.
Voici la dernière chose que j'ai essayée, qui a quand même renvoyé les résultats de recherche pour tout le contenu, pas seulement pour les titres:
MarkUp
<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
<input type="hidden" name="post_type" value="product" />
<input type="text" value="" name="s" />
<input type="submit" value="Search" />
</form>
Rappel du filtreSearch-SQL
// Search product titles only.
function __search_by_title_only( $search, &$wp_query ) {
global $wpdb;
if($_GET['post_type'] = 'product' )
return $search;
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
N'importe qui? J'imagine que cela a quelque chose à voir avec le type de message woocommerce lui-même ... ils aiment mettre beaucoup de crochets personnalisés.
C'est une question de 9 mois, mais comme j'avais le même problème et que j'avais trouvé une solution, je suis venu ici pour le poster.
Dans le fichier wp-content/plugins/woocommerce/classes/class-wc-query.php
, fonction pre_get_posts( $q )
, WooCommerce définit à la ligne 114:
add_filter( 'posts_where', array( $this, 'search_post_excerpt' ) );
C’est le moment où WooCommerce gâche votre requête!
La fonction search_post_excerpt
est définie à la ligne 132, et vous pouvez voir qu'il ajoute un extrait à la requête.
Donc vous avez 2 solutions:
Le mauvais, c'est commenter la ligne 114!
//add_filter( 'posts_where', array( $this, 'search_post_excerpt' ) );
Le bon, je ne me suis pas implémenté moi-même, mais devrait être quelque chose comme ajouter un filtre sur posts_where
qui fonctionne après WooCommerce et le réparer. Ou peut-être supprimer le filtre.
Je chercherai mieux la bonne solution, et je promets de la poster ici. Mais la mauvaise solution fait plutôt bien le travail.
Jusqu'à présent, votre plugin a l'air bien. Pourriez-vous vider la chaîne SQL finale et l'ajouter à votre question? Aussi: le plugin WC enregistre-t-il tout le contenu de la table posts en tant que type post? Si oui: Avez-vous ajouté une restriction pour rechercher uniquement par ce type de message? Vous devrez probablement le faire dans le filtre $posts_clauses
- de la clause $clauses['where']
ou à l'intérieur du filtre posts_where
-. Remplacez simplement la partie post_type = post
par votre type de publication personnalisé à partir de WC.