「ワードプレス」プラグインなしで溜まっていくリビジョンを管理画面からまとめて削除できるようにする

カテゴリー:WordPress

このブログもワードプレスを使用して作成をしています。パーマリンクの設定を投稿のidにして設定をしているのですが、投稿数もそんなに多くないのに気づけば投稿のIDが736とかなり増えてしまっていました。リビジョンがどんどん保存されてしまっているので、IDがどんどん増えてしまっている状態です。

そこで今回、リビジョンのデータだけ削除する仕組みを管理画面に作成をしようと思いその方法を備忘記録として記載します。

そもそもリビジョンが不要?

そもそもリビジョンが不要だよっていう場合もあると思います。その場合は、wp-config.phprequire_once(ABSPATH . ‘wp-settings.php’);より前にdefine( ‘WP_POST_REVISIONS’, false );を追加するとリビジョンの機能が停止されます。

大体106行目あたりにrequire_once(ABSPATH . ‘wp-settings.php’);が記載されていると思うので、それより前に記載すればOKです。define( ‘WP_POST_REVISIONS’, false );を追記後、管理画面にアクセスするとリビジョンの項目が消えていると思います。

リビジョンは必要だけど回数を制限したい

リビジョンは必要だけど回数を制限したい場合、これが一番多いのかなと思います。その場合もやはりwp-config.phprequire_once(ABSPATH . ‘wp-settings.php’);より前にdefine( ‘WP_POST_REVISIONS’, リビジョンを保存したい回数 );を追加すると指定されたリビジョンを保存したい回数だけ保存されるようになり、古いものは自動的に削除されるようになります。

管理画面からリビジョンを削除できるようにする

今回は、簡単にpostsテーブルに保存されている、リビジョンを削除する方法を管理画面に追加しようと思います。編集するファイルはfunctions.phpです。

functions.php
function le_revision_delete_menu_items()
{
    add_menu_page('リビジョン削除', 'リビジョン削除', 'manage_options', 'revision_list', 'revision_delete_render_page', 'dashicons-no-alt');
}
add_action('admin_menu', 'le_revision_delete_menu_items');

これでリビジョン削除というメニューが管理画面に追加されます。

function revision_delete_render_page()
{
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {

        $le_nonce = isset($_POST['le_nonce']) ? $_POST['le_nonce'] : null;
        if (!wp_verify_nonce($le_nonce, wp_create_nonce(__FILE__))) {
            wp_die('Die');
        }
        global $wpdb;
        $result = $wpdb->delete('wp_posts', ['post_type' => 'revision'], ['%s']);
        if ($result === false)
            echo '<script>alert(\'revisionの削除に失敗しました。\');</script>';
            if ($result === 0)
                echo '<script>alert(\'削除するrevisionがありません\');</script>';
              if ($result > 0)
                  echo '<script>alert(\'revisionの削除に成功しました。\');</script>';
    }
  ?>
   <div class="wrap">
     <div id="icon-users" class="icon32"><br/></div>
     <h2 style="margin-bottom: 48px;">リビジョンをpostsテーブルから削除</h2>
     <div style="margin-bottom: 48px;">
       <p>・リビジョンを削除と自動下書きをpostsテーブルから削除を削除します</p>
       <form id="revision_delete_form" method="post" action="#">
         <?php wp_nonce_field(wp_create_nonce(__FILE__), 'le_nonce'); ?>
         <?php submit_button('リビジョンを削除', 'primary', 'submit', false); ?>
       </form>
     </div>
  </div>
  <?php
}

$wpdbのdeleteを使用して削除します。リビジョンが保存されているテーブルはプリフィクスを変更していない場合、「wp_posts」になるので、テーブルをwp_postsに指定。リビジョンはpost_typeがrevisionに設定されているので、WHERE 句に[‘post_type’ => ‘revision’]を指定。書式を[‘%s’]で、文字列に指定。後はPOSTされた後の処理を作成して完成です。

実行したところ736個のデータから68個まで削減できました。かなりのリビジョンが溜まっていたことに驚き!!リビジョン機能に助けられたことが何度もあり、可能な限りそのまま使用したかったので今回の機能を作成してみてよかったです。


タグ

関連する投稿

ドラクエ好きな社会保険労務士有資格者・ファイナンシャルプランナー技能士検定2級正会員が運営をしています。当ブログではDQMSLを中心にWordPress・HTML・CSS・JS・PHPなどのTips備忘記録や資格関連の情報、その他雑記を発信して行きます。