Tout savoir sur WordPress
Tutoriel WordPress

Rechercher des médias en fonction du titre de l’article attaché

Cette astuce permet de rechercher dans l’espace d’administration des médias en fonction du titre de l’article auquel ils sont attachés.

Lorsque vous faites une recherche dans les médias, WordPress examine dans le titre et la description des médias pour retourner ces résultats.

Dans cette astuce, je vous propose d’ajouter à cette recherche le titre de l’article parent contenant le média recherché !

Modification de la requête

Je vais modifier la requête de la recherche dans la page des médias et ajouter une clause dans le WHERE grâce au hook posts_request.

Copier le code ci-dessous dans le fichier functions.php présent à la racine de votre thème :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


function baw_search_media_by_post( $request ) {
    
    global $pagenow, $wpdb;
    
    // Si je suis sur la page des médias et qu'une recherche a été lancée.
    if ( is_admin() && $pagenow=='upload.php' && isset( $_GET['s'] ) ) {
        
        // Je garde la configuration actuelle de l'utilisateur et aussi la page vue.
        $upload_per_page = apply_filters('upload_per_page', (int)get_user_option( 'upload_per_page' ) );
        $upload_per_page = empty( $upload_per_page ) || $upload_per_page prepare('SELECT SQL_CALC_FOUND_ROWS '.$wpdb->posts.'. *
			FROM '.$wpdb->posts.'
			WHERE 1=1
                        AND '.$wpdb->posts.'.post_type="attachment"
			AND ('.$wpdb->posts.'.post_status="inherit" OR '.$wpdb->posts.'.post_status="private")
			AND
			('.$wpdb->posts.'.post_title LIKE "%%%1$s%%"
			  OR '.$wpdb->posts.'.post_content LIKE "%%%1$s%%"
			  OR '.$wpdb->posts.'.post_parent IN (
				SELECT ID FROM '.$wpdb->posts.' AS p 
				WHERE p.post_type"attachment" 
				AND p.post_title LIKE "%%%1$s%%"
			        )
			)
			ORDER BY '.$wpdb->posts.'.post_date DESC LIMIT %2$d, %3$d',
			like_escape( $_GET['s'] ), $start, $upload_per_page
		);
    }
    return $request;
}
add_filter('posts_request' , 'baw_search_media_by_post' );

[/pastacode]

La requête d’origine

Voici la requête d’origine avec le mot “test” comme mot de recherche :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


SELECT SQL_CALC_FOUND_ROWS wp_posts.* 
FROM wp_posts 
WHERE 1=1 
AND (((wp_posts.post_title LIKE '%test%') OR (wp_posts.post_content LIKE '%test%'))) 
AND wp_posts.post_type = 'attachment' 
AND (wp_posts.post_status = 'inherit' OR wp_posts.post_status = 'private') 
ORDER BY wp_posts.post_date DESC LIMIT 0, 20

[/pastacode]

On constate que la recherche est effectuée uniquement dans le titre et la description des médias et non dans le titre de l’article parent.

Aperçu du résultat final

Voilà qui est chose faite avec mon astuce ! Voici la capture de mon essai sur l’article “test post”. Mon média est une image de koala où le mot ‘test’ ne figure pas dans le titre ou le contenu de l’article.

Encore une fois, j’utilise cette fonctionnalité sur toutes mes installations WordPress. Bien à vous !

Cet article a été mis à jour il y a 4527 jours - Il n'est peut être plus à jour !

Article écrit par Julio P.

Fondateur de SecuPress, l’extension de sécurité WordPress, Julio Potier est un Expert WordPress, un Formateur Expérimenté et un Consultant en Sécurité Web.

Il aime partager ses compétences et ses réflexions sur WordPress, donnant des conférences partout dans le monde.

3 Commentaires

  1. Pas mal du tout. J’ai cru voir passer un plugin qui devait reprendre le même principe.

  2. Excellent, voici qui va servir.
    Je préfère cette solution à un plugin, ceci est simple à mettre en place et beaucoup plus léger je pense.
    Merci

  3. Salut,

    Dans le même principe, il pourrait être intéressant de proposer une solution pour recherche via les tags médias en plus de la recherche classique ? Cela en aiderait plus d’un à mon avis.

    Merci.