Comment rechercher et afficher les posts dupliqués dans wordpress (par post_title)
Par Duane C.,
Publié le 13 juillet 2018
J’ai récemment créé un site web wordpress qui répertorie un très grand nombre de films (custom post), d’acteurs (autre custom post) et de réalisateurs (dernier custom post). Des connexions sont mises en places entre ces custom posts, avec le très célèbre plugin Posts 2 Posts (malheureusement plus supporté depuis quelques années …).
Pour identifier les films ou acteurs qui auraient par mégarde été publiés plusieurs fois, je vais comparer tous les noms de tous mes acteurs (post_title). Aucune fonction du framework wordpress ne me permet de faire cela en natif. Je vais donc faire une requête directement dans ma base de donnée. Pour cela, j’utilise la variable wordpress en php global $wpdb;
Ensuite, je peux passer ma requête SQL directement dans un template de page, pour aller chercher cette information dans ma base de donnée et l’afficher sur une page spécifique.
$duplicate_titles = $wpdb->get_col(" SELECT a.ID, a.post_title, a.post_type FROM {$wpdb->posts} AS a INNER JOIN ( SELECT post_title, MIN( id ) AS min_id FROM {$wpdb->posts} WHERE post_type = 'films' GROUP BY post_title HAVING COUNT( * ) > 1 ) AS b ON b.post_title = a.post_title AND b.min_id <> a.id AND a.post_type = 'films' ");
Enfin, je fais une boucle pour lister chaque titre sur ma page.
if($duplicate_titles) { echo '<h2>Films en double :</h2><br>'; foreach( $duplicate_titles as $duplicate_id ) { echo get_the_title ($duplicate_id) . '<br>'; } }