web-dev-qa-db-fra.com

Défaut WP rechercher en excluant des caractères spécifiques, est-ce possible?

J'aimerais savoir s'il est possible de personnaliser le module de recherche par défaut de Wordpress. J'ai un site web qui traite des équipes et de leurs nouvelles.

Certaines de ces équipes ont leurs noms écrits comme ceci

  • H.M.S.
  • L.A. Dream
  • N.Y. Invaders

J'aimerais que les modules de recherche puissent gérer ces équipes dans les résultats même si je cherche des chaînes telles que HMS, ou LA Dream , ou NY, au lieu de remplir les caractères avec des points. Quelqu'un a-t-il une suggestion ou connaît-il un WP astuce dont je ne suis pas au courant pour le moment?

Merci d'avance

2
axel

Termes de recherche Dotifier:

Voici une idée utilisant le filtre request pour ajouter des mots "en pointillés" de deux ou trois caractères ne contenant aucun point aux termes de recherche actuels.

Donc, si votre chaîne de recherche est par exemple:

Les rêves de LA

il deviendra:

LA Dreams L.A.

Voici un plugin de démonstration pour modifier la recherche par défaut:

<?php
/**
 * Plugin Name: Search Terms Dotifier
 * Author:      birgire
 * Plugin URI:  http://wordpress.stackexchange.com/a/157972/26350
 * Version:     0.0.1
 */

add_filter( 'request', function( $request ) {
    if( ! is_admin() && isset( $request['s'] ) )
    {
        // Dont' dotify these words (lower case):
        $exclude = array( 'the', 'in', 'it', 'he', 'she', 'was' );

        // Loop over search terms:
        $words = explode( ' ', $request['s'] );
        foreach( (array) $words as $Word )
        {
             // Words with two or three chars that don't contain any dots:
             if( mb_strlen( $Word ) > 1
                 && mb_strlen( $Word ) < 4 
                 && false === strpos( $Word, '.' ) 
                 && ! in_array( mb_strtolower( $Word ), $exclude, true ) 
             )
             {
                 // Append the 'dotted' Word:
                 $words[] = join( '.', str_split( $Word ) ) . '.';
             }
         }
         $request['s'] = join( ' ', $words );
    }
    return $request;
});

Espérons que vous pourrez l’étendre davantage à vos besoins.

0
birgire