Comment rechercher et afficher les posts dupliqués dans wordpress (par post_title)

Logo MySQL MySQL
Logo Wordpress Wordpress

Par ,
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>';
  }
}
S’abonner
Notification pour
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires