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

Par ,
Publié le 13 juillet 2018
MySQLWordpress

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>';
  }
}

Poster un Commentaire

avatar
  S’abonner  
Notifier de