Kuıllanmadan önce data yedeğinizi almanızı tavsiye ederim Sorumluluk tamamiyle size ait
  • admin sayfasında gösteriliyor.
  • Silme işlemi tamamlanınca başarılı mesaj ile birlikte kaç tane silindiği belirtiliyor.
  • Silme işlemi sonrasında sayı güncelleniyor (sayfa yenilenince).
  • Çok temel ama işini görecek şekilde düzenlenlendi
  • silinmeden önce size eminmisin diye sorar
Adminde bu şekilde birr menü karşılar


işine yarayacak basit bir eklenti


Yazıları sil Seçildi (Toplam: 0)Sayfaları sil Seçildi (Toplam: 0)Tüm yorumları sil Seçildi (Toplam: 0)Onaylanmamış yorumları sil Seçildi (Toplam: 0)

<?php
/*
Plugin Name: WP Silici
Description: Yazılar, sayfalar ve yorumları (onaylı/onaysız) topluca silmenizi sağlar. Silinecek içerik sayısını gösterir ve işlem öncesi onay alır.
Version: 1.3
Author: Senin İsmin
*/

add_action('admin_menu', function() {
    add_menu_page(
        'WP Silici',
        'WP Silici',
        'manage_options',
        'wp-silici',
        'wp_silici_admin_page',
        'dashicons-trash',
        80
    );
});

function wp_silici_admin_page() {
    if (!current_user_can('manage_options')) {
        return;
    }

    global $wpdb;

    // Sayımlar
    $post_count = wp_count_posts('post')->publish + wp_count_posts('post')->draft + wp_count_posts('post')->pending + wp_count_posts('post')->trash + wp_count_posts('post')->future + wp_count_posts('post')->private;
    $page_count = wp_count_posts('page')->publish + wp_count_posts('page')->draft + wp_count_posts('page')->pending + wp_count_posts('page')->trash + wp_count_posts('page')->future + wp_count_posts('page')->private;
    $comment_count_all = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->comments}");
    $comment_count_unapproved = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->comments} WHERE comment_approved != '1'");

    // Silme işlemi
    if (isset($_POST['wp_silici_action']) && check_admin_referer('wp_silici_bulk_delete_action', 'wp_silici_nonce_field')) {
        $deleted_counts = [];

        if (!empty($_POST['delete_posts'])) {
            $posts = get_posts([
                'numberposts' => -1,
                'post_type' => 'post',
                'post_status' => 'any',
                'fields' => 'ids',
            ]);
            foreach ($posts as $post_id) {
                wp_delete_post($post_id, true);
            }
            $deleted_counts['posts'] = count($posts);
            $post_count = 0;
        }

        if (!empty($_POST['delete_pages'])) {
            $pages = get_posts([
                'numberposts' => -1,
                'post_type' => 'page',
                'post_status' => 'any',
                'fields' => 'ids',
            ]);
            foreach ($pages as $page_id) {
                wp_delete_post($page_id, true);
            }
            $deleted_counts['pages'] = count($pages);
            $page_count = 0;
        }

        if (!empty($_POST['delete_comments_all'])) {
            $wpdb->query("DELETE FROM {$wpdb->comments}");
            $wpdb->query("DELETE FROM {$wpdb->commentmeta}");
            $deleted_counts['comments_all'] = true;
            $comment_count_all = 0;
            $comment_count_unapproved = 0;
        }

        if (!empty($_POST['delete_comments_unapproved'])) {
            $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved != '1'");
            $wpdb->query("DELETE cmeta FROM {$wpdb->commentmeta} cmeta LEFT JOIN {$wpdb->comments} c ON cmeta.comment_id = c.comment_ID WHERE c.comment_ID IS NULL");
            $deleted_counts['comments_unapproved'] = true;
            $comment_count_all -= $comment_count_unapproved;
            $comment_count_unapproved = 0;
        }

        echo '<div class="notice notice-success is-dismissible"><p>';
        echo 'Silme işlemi tamamlandı. ';
        if (isset($deleted_counts['posts'])) echo $deleted_counts['posts'] . ' yazı silindi. ';
        if (isset($deleted_counts['pages'])) echo $deleted_counts['pages'] . ' sayfa silindi. ';
        if (isset($deleted_counts['comments_all'])) echo 'Tüm yorumlar silindi. ';
        if (isset($deleted_counts['comments_unapproved'])) echo 'Onaylanmamış yorumlar silindi.';
        echo '</p></div>';
    }
    ?>

    <div class="wrap">
        <h1>WP Silici - Toplu Silme Aracı</h1>
        <form method="post" onsubmit="return confirm('Seçilen içerikleri silmek üzeresiniz. Emin misiniz? Bu işlem geri alınamaz!')">
            <?php wp_nonce_field('wp_silici_bulk_delete_action', 'wp_silici_nonce_field'); ?>
            <table class="form-table">
                <tr>
                    <th scope="row">Yazıları sil</th>
                    <td>
                        <label><input type="checkbox" name="delete_posts" value="1"> Seçildi (Toplam: <strong><?php echo $post_count; ?></strong>)</label>
                    </td>
                </tr>
                <tr>
                    <th scope="row">Sayfaları sil</th>
                    <td>
                        <label><input type="checkbox" name="delete_pages" value="1"> Seçildi (Toplam: <strong><?php echo $page_count; ?></strong>)</label>
                    </td>
                </tr>
                <tr>
                    <th scope="row">Tüm yorumları sil</th>
                    <td>
                        <label><input type="checkbox" name="delete_comments_all" value="1"> Seçildi (Toplam: <strong><?php echo $comment_count_all; ?></strong>)</label>
                    </td>
                </tr>
                <tr>
                    <th scope="row">Onaylanmamış yorumları sil</th>
                    <td>
                        <label><input type="checkbox" name="delete_comments_unapproved" value="1"> Seçildi (Toplam: <strong><?php echo $comment_count_unapproved; ?></strong>)</label>
                    </td>
                </tr>
            </table>
            <p><em>Not: “Tüm yorumları sil” seçiliyse, “Onaylanmamış yorumları sil” devre dışı kalır.</em></p>
            <p class="submit">
                <input type="submit" name="wp_silici_action" class="button button-primary" value="Seçilenleri Sil">
            </p>
        </form>

        <script>
            // Yorum kutularını senkronize et
            document.addEventListener('DOMContentLoaded', function () {
                const allComments = document.querySelector('input[name="delete_comments_all"]');
                const unapprovedComments = document.querySelector('input[name="delete_comments_unapproved"]');

                function toggleUnapproved() {
                    if (allComments.checked) {
                        unapprovedComments.checked = false;
                        unapprovedComments.disabled = true;
                    } else {
                        unapprovedComments.disabled = false;
                    }
                }

                allComments.addEventListener('change', toggleUnapproved);
                toggleUnapproved();
            });
        </script>
    </div>
    <?php
}