ワードプレスの重複タイトルを持つもので、「新しい方」を削除したいと思います。

投稿数が非常に多いので、Delete Duplicate Posts等複数試しましたが、各種プラグインは動きませんでした。

そこでMysqlで直接でも結構なのですが、下記の方法で消すことは出来たのですが、
【投稿日時が新しいもの】を削除し、古い一つは残しておく方法は御座いませんでしょうか。
http://takeshiyako.blogspot.jp/2014/01/wordpressmysqlsql.html

上記で既にそうなっていればいいのですが、宜しくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/08/17 00:34:23
  • 終了:2014/08/24 00:35:03

回答(1件)

id:a-kuma3 No.1

a-kuma3回答回数4469ベストアンサー獲得回数18442014/08/17 09:45:33

ポイント100pt

参考元のページにある SQL では、重複した投稿の中で、投稿ID が一番小さいものを除外しています。
普通に WordPress の画面から投稿したのであれば、期待通りに、投稿日時が一番古いものが残っていると思います。

何らかの方法で、過去日の投稿を後で追加するような手段を使った場合には、一番小さいID ではなく、一番小さい投稿日時を除外すれば良いと思います。

/* 重複した投稿を探すSQL */

SELECT a.ID, a.post_title, a.post_type, a.post_status
FROM wp_posts AS a
   INNER JOIN (
      SELECT post_title, MIN( post_date ) AS min_date
      FROM wp_posts
      WHERE post_type = 'post'
      AND post_status = 'publish'
      GROUP BY post_title
      HAVING COUNT( * ) > 1
   ) AS b ON b.post_title = a.post_title
AND b.min_date <> a.post_date
AND a.post_type = 'post'
AND a.post_status = 'publish'


/* 重複した投稿を削除するSQL */

DELETE a.*
FROM wp_posts AS a
   INNER JOIN (
      SELECT post_title, MIN( post_date ) AS min_date
      FROM wp_posts
      WHERE post_type = 'post'
      AND post_status = 'publish'
      GROUP BY post_title
      HAVING COUNT( * ) > 1
   ) AS b ON b.post_title = a.post_title
AND b.min_date <> a.post_date
AND a.post_type = 'post'
AND a.post_status = 'publish';

参考:wp_posts テーブルのデータベース構造

他1件のコメントを見る
id:a-kuma3

回答した当時のことは覚えてないのですが、以下のようなところを参考にしたんだったかなあと思います。
http://wpkrauts.com/2013/find-and-delete-duplicate-posts-in-wordpress/

2016/09/24 01:54:46
id:iori753

なるほど、ありがとう御座います!!

2016/09/24 10:57:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません