# Nourrir le widget Posts natif d’Elementor avec une recherche Meilisearch maison

> « Erreur : ce widget nécessite Elementor Pro » — le message classique face au Loop Grid quand le budget ne suit pas. La recette pour brancher un moteur Meilisearch auto-hébergé sur le widget Posts gratuit.

- Auteur : WordPress Développement
- Publié le : 2023-01-16
- Mis à jour le : 2023-01-16
- Catégorie : Elementor
- URL : https://www.wpmoderne.fr/elementor/widget-posts-meilisearch-recherche-maison/

## L’essentiel

- Le widget Posts gratuit peut afficher une requête WP_Query modifiée par filtre
- Meilisearch remplace la recherche native sans surcoût de licence Pro
- L'indexation se fait via une tâche planifiée WP-Cron

« Erreur : ce widget nécessite Elementor Pro. » Ce message s'affiche dès qu'on tente de glisser un Loop Grid sur un site resté en version gratuite, souvent pour une bonne raison : le budget ne suit pas, ou l'agence a hérité d'un site sans licence active. Le widget Posts, disponible dans la version gratuite d'Elementor, reste alors le seul moyen natif d'afficher une liste dynamique d'articles, avec des options de requête plus limitées que le Loop Grid.

Cette recette ne traite pas de l'indexation e-commerce, qui suppose une logique de facettes et de stock bien plus complexe : elle explique comment brancher un moteur de recherche auto-hébergé, Meilisearch, en amont du widget Posts gratuit, pour obtenir une recherche pertinente sans passer par la version payante d'Elementor ni par un service de recherche tiers facturé à l'usage.

## Le problème posé par la recherche native de WordPress

La recherche native de WordPress, basée sur une comparaison de chaînes dans la table `wp_posts`, ne gère ni les fautes de frappe, ni la pertinence par pondération, ni les synonymes. Sur un site de contenu avec plusieurs centaines d'articles, les résultats sont souvent décevants, sans qu'il soit nécessaire pour autant de basculer vers un service de recherche facturé au volume de requêtes.

## Installer et indexer avec Meilisearch

Meilisearch est un moteur de recherche open source, auto-hébergeable sur le même serveur que WordPress ou sur une instance séparée. L'indexation des articles se fait via un script PHP déclenché par une tâche planifiée WP-Cron, qui pousse le contenu vers l'API Meilisearch :

```
<?php
add_action( 'meilisearch_index_articles', function() {
    $articles = get_posts( array( 'post_type' => 'post', 'posts_per_page' => -1 ) );
    $documents = array();
    foreach ( $articles as $article ) {
        $documents[] = array(
            'id'      => $article->ID,
            'titre'   => $article->post_title,
            'extrait' => wp_trim_words( $article->post_content, 40 ),
            'url'     => get_permalink( $article->ID ),
        );
    }
    wp_remote_post( 'http://localhost:7700/indexes/articles/documents', array(
        'headers' => array( 'Authorization' => 'Bearer ' . MEILISEARCH_API_KEY ),
        'body'    => wp_json_encode( $documents ),
    ) );
} );
```

> L'essentiel à retenir : Le widget Posts gratuit peut afficher une requête WP_Query modifiée par filtre ; Meilisearch remplace la recherche native sans surcoût de licence Pro ; L'indexation se fait via une tâche planifiée WP-Cron

## Rediriger la recherche vers Meilisearch

Plutôt que de reconstruire une page de résultats entière, on intercepte la requête de recherche WordPress avec le filtre `posts_pre_query`, qui permet de court-circuiter `WP_Query` et de lui substituer les résultats obtenus depuis l'API Meilisearch, transformés en objets `WP_Post` valides. Cette approche a l'avantage de rester compatible avec le widget Posts natif d'Elementor : celui-ci continue d'afficher la boucle WordPress standard, sans savoir que les résultats proviennent en réalité de Meilisearch.

## Adapter le widget Posts à la page de résultats

Le widget Posts est configuré sur la page de résultats de recherche avec une source « Requête actuelle », ce qui lui permet d'hériter automatiquement de la requête modifiée par le filtre. On perd, par rapport à un Loop Grid Pro, la possibilité de personnaliser finement chaque Loop Item, mais les templates de widget Posts couvrent largement les besoins d'une page de résultats classique (titre, extrait, image à la une, lien).

## Variantes possibles

- Ajouter une recherche à mesure que l'utilisateur tape (recherche instantanée) en interrogeant directement l'API Meilisearch en JavaScript, sans recharger la page.
- Étendre l'indexation aux pages et aux types de contenu personnalisés, en dupliquant la logique de la tâche planifiée pour chaque type concerné.
- Ajouter une pondération de pertinence par typo-tolerance, réglable directement dans les paramètres d'index de Meilisearch, sans modification côté WordPress.

> Un point de vigilance qu'on rappelle à chaque déploiement de ce type : l'instance Meilisearch doit rester accessible uniquement en interne ou protégée par une clé d'API, jamais exposée publiquement sans authentification.

## En résumé

Un budget serré n'oblige pas à se contenter d'une recherche WordPress médiocre ni à payer une licence Elementor Pro pour le seul confort du Loop Grid. Meilisearch, combiné au filtre `posts_pre_query` et au widget Posts natif, offre une recherche pertinente et rapide, pour le coût d'hébergement d'une instance auto-gérée.
