Friday 22 November 2013

WordPress で重複記事を削除するプラグインを作ったよ。

WordPressで重複記事を削除するための"Delete all duplicate posts"ってプラグインがあるんですが、なんかうまく動かないので、自分で作りなおしました。タイトルが同じ記事がアップされると、古いバージョンの投稿は自動で削除されます。


<?php
/*
Plugin Name: Delete duplicate posts
Plugin URI: 
Description: Deletes duplicate posts based on their title
Author: Mitsuki Fukunaga
Version: 1.0
Author URI:
*/

function WPDeleteDuplicates(){
    global $wpdb;
    $wpdbprefix = $wpdb->prefix;
    
    $wpdb->query("
        DELETE FROM ".$wpdbprefix."posts
        WHERE ".$wpdbprefix."posts.ID not in (
            select max_id from (
                SELECT MAX(t1.ID) AS max_id
                FROM ".$wpdbprefix."posts AS t1
                WHERE t1.post_type = 'post'
                GROUP BY t1.post_title
            ) as t2
        ) AND ".$wpdbprefix."posts.post_type = 'post'
    ");
}

add_action('publish_post', 'WPDeleteDuplicates');

?>

1 comment:

  1. はじめまして
    WPDeleteDuplicatesをご提供いただきまして、大変重宝しております。

    大変厚かましいお願いかと思いますがお教え下さいますと幸いです。

    カスタム投稿タイプ(例えばカスタム投稿タイプ名がportfolioだとする)での重複削除に変更したいと思っておりますが変更方法としては

    WHERE t1.post_type = 'post'

    WHERE t1.post_type = 'portfolio'


    ) AND ".$wpdbprefix."posts.post_type = 'post'

    ) AND ".$wpdbprefix."posts.post_type = 'portfolio'

    を変更するだけでよろしいのでしょうか?

    試したのですが上記ではダメだったようでしたので、もしお教え下さいますと幸いです


    何卒よろしくお願いします

    ReplyDelete