بررسی و پاکسازی دیتابیس وردپرس | شناسایی جداول خالی و بدون استفاده

بررسی و پاکسازی دیتابیس وردپرس | شناسایی جداول خالی و بدون استفاده

🗄️ افزونه بررسی و پاکسازی دیتابیس وردپرس؛ شناسایی جداول اضافی، خالی و بلااستفاده اگر سایت وردپرسی شما مدت زیادی فعال بوده، احتمالاً دیتابیس آن به مرور زمان با تعداد زیادی جدول مواجه شده است. نصب و حذف افزونه‌ها، تغییر قالب، استفاده از ووکامرس، افزونه‌های فروشگاهی، افزونه‌های سئو، فرم‌سازها و سایر

تعداد دانلود ۱
نسخه ۱
آخرین بروزرسانی ۱۳ مهر ۱۴۰۵، ۰۸:۲۴
پسورد فایل www.gildata.ir
پسورد کپی شد
کد
/**
 * Gildata Article Code
 * Author: SAJAD.TAEB
 * Website: gildata.ir
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}


/* =========================================================
 * META BOX
 * ========================================================= */

add_action( 'add_meta_boxes', function() {

    add_meta_box(
        'gildata_article_code',
        'کد',
        'gildata_article_code_metabox',
        'post',
        'normal',
        'high'
    );

});


/* =========================================================
 * META BOX CONTENT
 * ========================================================= */

function gildata_article_code_metabox( $post ) {

    wp_nonce_field(
        'gildata_article_code_save',
        'gildata_article_code_nonce'
    );

    $code = get_post_meta(
        $post->ID,
        '_gildata_article_code',
        true
    );

    ?>

    <div class="gildata-code-admin">

        <p>
            <label
                for="gildata_article_code_field"
                style="font-weight:600;"
            >
                کد موردنظر را وارد کنید
            </label>
        </p>

        <textarea
            id="gildata_article_code_field"
            name="gildata_article_code"
            rows="16"
            spellcheck="false"
            placeholder="کد Java، PHP، JavaScript، CSS، HTML و ... را اینجا وارد کنید."
        ><?php echo esc_textarea( $code ); ?></textarea>

        <p class="description">
            این کد با شورتکد
            <code>
    
کد
/**
 * Gildata Article Code
 * Author: SAJAD.TAEB
 * Website: gildata.ir
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}


/* =========================================================
 * META BOX
 * ========================================================= */

add_action( 'add_meta_boxes', function() {

    add_meta_box(
        'gildata_article_code',
        'کد',
        'gildata_article_code_metabox',
        'post',
        'normal',
        'high'
    );

});


/* =========================================================
 * META BOX CONTENT
 * ========================================================= */

function gildata_article_code_metabox( $post ) {

    wp_nonce_field(
        'gildata_article_code_save',
        'gildata_article_code_nonce'
    );

    $code = get_post_meta(
        $post->ID,
        '_gildata_article_code',
        true
    );

    ?>

    <div class="gildata-code-admin">

        <p>
            <label
                for="gildata_article_code_field"
                style="font-weight:600;"
            >
                کد موردنظر را وارد کنید
            </label>
        </p>

        <textarea
            id="gildata_article_code_field"
            name="gildata_article_code"
            rows="16"
            spellcheck="false"
            placeholder="کد Java، PHP، JavaScript، CSS، HTML و ... را اینجا وارد کنید."
        ><?php echo esc_textarea( $code ); ?></textarea>

        <p class="description">
            این کد با شورتکد
            <code>[gildata_code]</code>
            داخل مقاله نمایش داده می‌شود.
        </p>

        <div class="gildata-code-shortcode-row">

            <code>[gildata_code]</code>

            <button
                type="button"
                class="button gildata-copy-shortcode"
                data-code="[gildata_code]"
            >
                کپی شورتکد
            </button>

        </div>

    </div>

    <?php
}


/* =========================================================
 * SAVE
 * ========================================================= */

add_action( 'save_post_post', function( $post_id ) {

    if (
        ! isset(
            $_POST['gildata_article_code_nonce']
        )
    ) {
        return;
    }

    if (
        ! wp_verify_nonce(
            sanitize_text_field(
                wp_unslash(
                    $_POST['gildata_article_code_nonce']
                )
            ),
            'gildata_article_code_save'
        )
    ) {
        return;
    }

    if (
        defined( 'DOING_AUTOSAVE' )
        && DOING_AUTOSAVE
    ) {
        return;
    }

    if (
        wp_is_post_revision( $post_id )
    ) {
        return;
    }

    if (
        ! current_user_can(
            'edit_post',
            $post_id
        )
    ) {
        return;
    }

    $code = isset(
        $_POST['gildata_article_code']
    )
        ? wp_unslash(
            $_POST['gildata_article_code']
        )
        : '';

    if (
        trim( $code ) === ''
    ) {

        delete_post_meta(
            $post_id,
            '_gildata_article_code'
        );

    } else {

        update_post_meta(
            $post_id,
            '_gildata_article_code',
            $code
        );

    }

} );


/* =========================================================
 * SHORTCODE
 * ========================================================= */

add_shortcode(
    'gildata_code',
    function() {

        if ( ! is_singular( 'post' ) ) {
            return '';
        }

        global $post;

        if ( ! $post ) {
            return '';
        }

        $code = get_post_meta(
            $post->ID,
            '_gildata_article_code',
            true
        );

        /*
         * اگر فیلد خالی باشد
         * هیچ خروجی نداشته باش.
         */

        if (
            trim( $code ) === ''
        ) {
            return '';
        }

        return gildata_render_code(
            $code
        );

    }
);


/* =========================================================
 * CODE RENDER
 * ========================================================= */

function gildata_render_code( $code ) {

    $code = str_replace(
        array(
            "rn",
            "r"
        ),
        "n",
        $code
    );

    $lines = explode(
        "n",
        $code
    );

    $numbers = '';

    foreach (
        $lines as $number => $line
    ) {

        $numbers .=
            '<span>' .
            esc_html(
                $number + 1
            ) .
            '</span>';

    }

    ob_start();

    ?>

    <div class="gildata-code-box">

        <div class="gildata-code-toolbar">

            <div class="gildata-code-title">

                <span class="gildata-code-dots">

                    <i></i>
                    <i></i>
                    <i></i>

                </span>

                <span>کد</span>

            </div>


            <button
                type="button"
                class="gildata-code-copy"
                aria-label="کپی کد"
            >

                <span class="gildata-copy-normal">
                    کپی کد
                </span>

                <span
                    class="gildata-copy-success"
                    hidden
                >
                    کپی شد ✓
                </span>

            </button>

        </div>


        <div class="gildata-code-area">

            <div
                class="gildata-code-lines"
                aria-hidden="true"
            >
                <?php echo $numbers; ?>
            </div>


            <pre
                class="gildata-code-content"
            ><?php echo esc_html( $code ); ?></pre>

        </div>

    </div>

    <?php

    return ob_get_clean();
}


/* =========================================================
 * FRONTEND CSS
 * BLACK / WHITE
 * ========================================================= */

add_action( 'wp_head', function() {

    ?>

    <style>

    .gildata-code-box {

        direction: ltr;

        width: 100%;

        margin: 32px 0;

        background: #0f0f0f;

        color: #fff;

        border: 1px solid #222;

        border-radius: 8px;

        overflow: hidden;

        box-sizing: border-box;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

    }


    /* Toolbar */

    .gildata-code-toolbar {

        min-height: 48px;

        padding: 0 12px;

        display: flex;

        align-items: center;

        justify-content: space-between;

        gap: 15px;

        background: #171717;

        border-bottom:
            1px solid #292929;

        box-sizing: border-box;

    }


    .gildata-code-title {

        display: flex;

        align-items: center;

        gap: 10px;

        color: #fff;

        font-family:
            Arial,
            Tahoma,
            sans-serif;

        font-size: 12px;

        font-weight: 600;

    }


    /* Mac dots */

    .gildata-code-dots {

        display: flex;

        gap: 5px;

    }


    .gildata-code-dots i {

        width: 8px;

        height: 8px;

        display: block;

        border-radius: 50%;

        background: #555;

    }


    /* Copy */

    .gildata-code-copy {

        appearance: none;

        border: 1px solid #3a3a3a;

        background: #222;

        color: #fff;

        border-radius: 5px;

        padding: 6px 10px;

        cursor: pointer;

        font-family:
            Tahoma,
            Arial,
            sans-serif;

        font-size: 11px;

        line-height: 1.5;

        transition:
            background .15s ease,
            border-color .15s ease;

    }


    .gildata-code-copy:hover {

        background: #2d2d2d;

        border-color: #555;

    }


    .gildata-code-copy.is-copied {

        background: #fff;

        color: #111;

        border-color: #fff;

    }


    /* Code area */

    .gildata-code-area {

        display: flex;

        width: 100%;

        max-height: 650px;

        overflow: auto;

        background: #0f0f0f;

    }


    /* Line numbers */

    .gildata-code-lines {

        flex: 0 0 50px;

        box-sizing: border-box;

        padding: 18px 10px;

        text-align: right;

        user-select: none;

        background: #0b0b0b;

        color: #555;

        border-right:
            1px solid #222;

        font-size: 12px;

        line-height: 1.8;

    }


    .gildata-code-lines span {

        display: block;

        height: 21.6px;

    }


    /* Code */

    .gildata-code-content {

        margin: 0;

        padding: 18px 20px;

        min-width: max-content;

        color: #f5f5f5;

        background: transparent;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

        font-size: 13px;

        line-height: 1.8;

        white-space: pre;

        tab-size: 4;

        text-align: left;

    }


    /* Scrollbar */

    .gildata-code-area::-webkit-scrollbar {

        width: 8px;

        height: 8px;

    }


    .gildata-code-area::-webkit-scrollbar-track {

        background: #080808;

    }


    .gildata-code-area::-webkit-scrollbar-thumb {

        background: #333;

        border-radius: 20px;

    }


    .gildata-code-area::-webkit-scrollbar-thumb:hover {

        background: #555;

    }


    /* Mobile */

    @media (max-width: 768px) {

        .gildata-code-box {

            border-radius: 6px;

            margin: 24px 0;

        }


        .gildata-code-toolbar {

            min-height: 46px;

        }


        .gildata-code-content {

            padding: 15px;

            font-size: 12px;

        }


        .gildata-code-lines {

            flex-basis: 40px;

            padding:
                15px 7px;

            font-size: 11px;

        }


        .gildata-code-copy {

            padding:
                5px 8px;

            font-size: 10px;

        }

    }

    </style>

    <?php

} );


/* =========================================================
 * FRONTEND JS
 * ========================================================= */

add_action( 'wp_footer', function() {

    ?>

    <script>

    document.addEventListener(
        'click',
        function( event ) {

            const button =
                event.target.closest(
                    '.gildata-code-copy'
                );

            if ( ! button ) {
                return;
            }

            const box =
                button.closest(
                    '.gildata-code-box'
                );

            if ( ! box ) {
                return;
            }

            const code =
                box.querySelector(
                    '.gildata-code-content'
                );

            if ( ! code ) {
                return;
            }

            const text =
                code.textContent;


            const success = function() {

                button.classList.add(
                    'is-copied'
                );

                const normal =
                    button.querySelector(
                        '.gildata-copy-normal'
                    );

                const copied =
                    button.querySelector(
                        '.gildata-copy-success'
                    );

                if ( normal ) {
                    normal.hidden = true;
                }

                if ( copied ) {
                    copied.hidden = false;
                }


                setTimeout(
                    function() {

                        button.classList.remove(
                            'is-copied'
                        );

                        if ( normal ) {
                            normal.hidden = false;
                        }

                        if ( copied ) {
                            copied.hidden = true;
                        }

                    },
                    1800
                );

            };


            if (
                navigator.clipboard
                &&
                window.isSecureContext
            ) {

                navigator.clipboard
                    .writeText( text )
                    .then( success );

                return;
            }


            const textarea =
                document.createElement(
                    'textarea'
                );

            textarea.value = text;

            textarea.style.position =
                'fixed';

            textarea.style.left =
                '-9999px';

            document.body.appendChild(
                textarea
            );

            textarea.focus();

            textarea.select();

            try {

                document.execCommand(
                    'copy'
                );

                success();

            } catch ( error ) {}

            textarea.remove();

        }
    );

    </script>

    <?php

} );


/* =========================================================
 * ADMIN CSS
 * NATIVE WORDPRESS
 * ========================================================= */

add_action( 'admin_head', function() {

    ?>

    <style>

    /*
     * فقط استایل لازم برای textarea.
     * بقیه ظاهر کاملاً از WordPress گرفته می‌شود.
     */

    #gildata_article_code .inside {

        margin: 0;

        padding: 12px;

    }


    .gildata-code-admin textarea {

        display: block;

        width: 100%;

        min-height: 280px;

        resize: vertical;

        box-sizing: border-box;

        direction: ltr;

        text-align: left;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

        font-size: 13px;

        line-height: 1.7;

        tab-size: 4;

    }


    .gildata-code-shortcode-row {

        display: flex;

        align-items: center;

        gap: 8px;

        margin-top: 10px;

    }


    .gildata-code-shortcode-row code {

        padding:
            5px 8px;

        background:
            #f6f7f7;

        border:
            1px solid #dcdcde;

        border-radius:
            3px;

    }

    </style>

    <?php

} );


/* =========================================================
 * ADMIN COPY SHORTCODE
 * ========================================================= */

add_action( 'admin_footer', function() {

    ?>

    <script>

    document.addEventListener(
        'click',
        function( event ) {

            const button =
                event.target.closest(
                    '.gildata-copy-shortcode'
                );

            if ( ! button ) {
                return;
            }

            const code =
                button.getAttribute(
                    'data-code'
                );

            const copied = function() {

                const old =
                    button.textContent;

                button.textContent =
                    'کپی شد';

                setTimeout(
                    function() {

                        button.textContent =
                            old;

                    },
                    1500
                );

            };


            if (
                navigator.clipboard
                &&
                window.isSecureContext
            ) {

                navigator.clipboard
                    .writeText( code )
                    .then( copied );

            } else {

                const textarea =
                    document.createElement(
                        'textarea'
                    );

                textarea.value = code;

                document.body.appendChild(
                    textarea
                );

                textarea.select();

                document.execCommand(
                    'copy'
                );

                textarea.remove();

                copied();

            }

        }
    );

    </script>

    <?php

} );
</code> داخل مقاله نمایش داده می‌شود. </p> <div class="gildata-code-shortcode-row"> <code>
کد
/**
 * Gildata Article Code
 * Author: SAJAD.TAEB
 * Website: gildata.ir
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}


/* =========================================================
 * META BOX
 * ========================================================= */

add_action( 'add_meta_boxes', function() {

    add_meta_box(
        'gildata_article_code',
        'کد',
        'gildata_article_code_metabox',
        'post',
        'normal',
        'high'
    );

});


/* =========================================================
 * META BOX CONTENT
 * ========================================================= */

function gildata_article_code_metabox( $post ) {

    wp_nonce_field(
        'gildata_article_code_save',
        'gildata_article_code_nonce'
    );

    $code = get_post_meta(
        $post->ID,
        '_gildata_article_code',
        true
    );

    ?>

    <div class="gildata-code-admin">

        <p>
            <label
                for="gildata_article_code_field"
                style="font-weight:600;"
            >
                کد موردنظر را وارد کنید
            </label>
        </p>

        <textarea
            id="gildata_article_code_field"
            name="gildata_article_code"
            rows="16"
            spellcheck="false"
            placeholder="کد Java، PHP، JavaScript، CSS، HTML و ... را اینجا وارد کنید."
        ><?php echo esc_textarea( $code ); ?></textarea>

        <p class="description">
            این کد با شورتکد
            <code>[gildata_code]</code>
            داخل مقاله نمایش داده می‌شود.
        </p>

        <div class="gildata-code-shortcode-row">

            <code>[gildata_code]</code>

            <button
                type="button"
                class="button gildata-copy-shortcode"
                data-code="[gildata_code]"
            >
                کپی شورتکد
            </button>

        </div>

    </div>

    <?php
}


/* =========================================================
 * SAVE
 * ========================================================= */

add_action( 'save_post_post', function( $post_id ) {

    if (
        ! isset(
            $_POST['gildata_article_code_nonce']
        )
    ) {
        return;
    }

    if (
        ! wp_verify_nonce(
            sanitize_text_field(
                wp_unslash(
                    $_POST['gildata_article_code_nonce']
                )
            ),
            'gildata_article_code_save'
        )
    ) {
        return;
    }

    if (
        defined( 'DOING_AUTOSAVE' )
        && DOING_AUTOSAVE
    ) {
        return;
    }

    if (
        wp_is_post_revision( $post_id )
    ) {
        return;
    }

    if (
        ! current_user_can(
            'edit_post',
            $post_id
        )
    ) {
        return;
    }

    $code = isset(
        $_POST['gildata_article_code']
    )
        ? wp_unslash(
            $_POST['gildata_article_code']
        )
        : '';

    if (
        trim( $code ) === ''
    ) {

        delete_post_meta(
            $post_id,
            '_gildata_article_code'
        );

    } else {

        update_post_meta(
            $post_id,
            '_gildata_article_code',
            $code
        );

    }

} );


/* =========================================================
 * SHORTCODE
 * ========================================================= */

add_shortcode(
    'gildata_code',
    function() {

        if ( ! is_singular( 'post' ) ) {
            return '';
        }

        global $post;

        if ( ! $post ) {
            return '';
        }

        $code = get_post_meta(
            $post->ID,
            '_gildata_article_code',
            true
        );

        /*
         * اگر فیلد خالی باشد
         * هیچ خروجی نداشته باش.
         */

        if (
            trim( $code ) === ''
        ) {
            return '';
        }

        return gildata_render_code(
            $code
        );

    }
);


/* =========================================================
 * CODE RENDER
 * ========================================================= */

function gildata_render_code( $code ) {

    $code = str_replace(
        array(
            "rn",
            "r"
        ),
        "n",
        $code
    );

    $lines = explode(
        "n",
        $code
    );

    $numbers = '';

    foreach (
        $lines as $number => $line
    ) {

        $numbers .=
            '<span>' .
            esc_html(
                $number + 1
            ) .
            '</span>';

    }

    ob_start();

    ?>

    <div class="gildata-code-box">

        <div class="gildata-code-toolbar">

            <div class="gildata-code-title">

                <span class="gildata-code-dots">

                    <i></i>
                    <i></i>
                    <i></i>

                </span>

                <span>کد</span>

            </div>


            <button
                type="button"
                class="gildata-code-copy"
                aria-label="کپی کد"
            >

                <span class="gildata-copy-normal">
                    کپی کد
                </span>

                <span
                    class="gildata-copy-success"
                    hidden
                >
                    کپی شد ✓
                </span>

            </button>

        </div>


        <div class="gildata-code-area">

            <div
                class="gildata-code-lines"
                aria-hidden="true"
            >
                <?php echo $numbers; ?>
            </div>


            <pre
                class="gildata-code-content"
            ><?php echo esc_html( $code ); ?></pre>

        </div>

    </div>

    <?php

    return ob_get_clean();
}


/* =========================================================
 * FRONTEND CSS
 * BLACK / WHITE
 * ========================================================= */

add_action( 'wp_head', function() {

    ?>

    <style>

    .gildata-code-box {

        direction: ltr;

        width: 100%;

        margin: 32px 0;

        background: #0f0f0f;

        color: #fff;

        border: 1px solid #222;

        border-radius: 8px;

        overflow: hidden;

        box-sizing: border-box;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

    }


    /* Toolbar */

    .gildata-code-toolbar {

        min-height: 48px;

        padding: 0 12px;

        display: flex;

        align-items: center;

        justify-content: space-between;

        gap: 15px;

        background: #171717;

        border-bottom:
            1px solid #292929;

        box-sizing: border-box;

    }


    .gildata-code-title {

        display: flex;

        align-items: center;

        gap: 10px;

        color: #fff;

        font-family:
            Arial,
            Tahoma,
            sans-serif;

        font-size: 12px;

        font-weight: 600;

    }


    /* Mac dots */

    .gildata-code-dots {

        display: flex;

        gap: 5px;

    }


    .gildata-code-dots i {

        width: 8px;

        height: 8px;

        display: block;

        border-radius: 50%;

        background: #555;

    }


    /* Copy */

    .gildata-code-copy {

        appearance: none;

        border: 1px solid #3a3a3a;

        background: #222;

        color: #fff;

        border-radius: 5px;

        padding: 6px 10px;

        cursor: pointer;

        font-family:
            Tahoma,
            Arial,
            sans-serif;

        font-size: 11px;

        line-height: 1.5;

        transition:
            background .15s ease,
            border-color .15s ease;

    }


    .gildata-code-copy:hover {

        background: #2d2d2d;

        border-color: #555;

    }


    .gildata-code-copy.is-copied {

        background: #fff;

        color: #111;

        border-color: #fff;

    }


    /* Code area */

    .gildata-code-area {

        display: flex;

        width: 100%;

        max-height: 650px;

        overflow: auto;

        background: #0f0f0f;

    }


    /* Line numbers */

    .gildata-code-lines {

        flex: 0 0 50px;

        box-sizing: border-box;

        padding: 18px 10px;

        text-align: right;

        user-select: none;

        background: #0b0b0b;

        color: #555;

        border-right:
            1px solid #222;

        font-size: 12px;

        line-height: 1.8;

    }


    .gildata-code-lines span {

        display: block;

        height: 21.6px;

    }


    /* Code */

    .gildata-code-content {

        margin: 0;

        padding: 18px 20px;

        min-width: max-content;

        color: #f5f5f5;

        background: transparent;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

        font-size: 13px;

        line-height: 1.8;

        white-space: pre;

        tab-size: 4;

        text-align: left;

    }


    /* Scrollbar */

    .gildata-code-area::-webkit-scrollbar {

        width: 8px;

        height: 8px;

    }


    .gildata-code-area::-webkit-scrollbar-track {

        background: #080808;

    }


    .gildata-code-area::-webkit-scrollbar-thumb {

        background: #333;

        border-radius: 20px;

    }


    .gildata-code-area::-webkit-scrollbar-thumb:hover {

        background: #555;

    }


    /* Mobile */

    @media (max-width: 768px) {

        .gildata-code-box {

            border-radius: 6px;

            margin: 24px 0;

        }


        .gildata-code-toolbar {

            min-height: 46px;

        }


        .gildata-code-content {

            padding: 15px;

            font-size: 12px;

        }


        .gildata-code-lines {

            flex-basis: 40px;

            padding:
                15px 7px;

            font-size: 11px;

        }


        .gildata-code-copy {

            padding:
                5px 8px;

            font-size: 10px;

        }

    }

    </style>

    <?php

} );


/* =========================================================
 * FRONTEND JS
 * ========================================================= */

add_action( 'wp_footer', function() {

    ?>

    <script>

    document.addEventListener(
        'click',
        function( event ) {

            const button =
                event.target.closest(
                    '.gildata-code-copy'
                );

            if ( ! button ) {
                return;
            }

            const box =
                button.closest(
                    '.gildata-code-box'
                );

            if ( ! box ) {
                return;
            }

            const code =
                box.querySelector(
                    '.gildata-code-content'
                );

            if ( ! code ) {
                return;
            }

            const text =
                code.textContent;


            const success = function() {

                button.classList.add(
                    'is-copied'
                );

                const normal =
                    button.querySelector(
                        '.gildata-copy-normal'
                    );

                const copied =
                    button.querySelector(
                        '.gildata-copy-success'
                    );

                if ( normal ) {
                    normal.hidden = true;
                }

                if ( copied ) {
                    copied.hidden = false;
                }


                setTimeout(
                    function() {

                        button.classList.remove(
                            'is-copied'
                        );

                        if ( normal ) {
                            normal.hidden = false;
                        }

                        if ( copied ) {
                            copied.hidden = true;
                        }

                    },
                    1800
                );

            };


            if (
                navigator.clipboard
                &&
                window.isSecureContext
            ) {

                navigator.clipboard
                    .writeText( text )
                    .then( success );

                return;
            }


            const textarea =
                document.createElement(
                    'textarea'
                );

            textarea.value = text;

            textarea.style.position =
                'fixed';

            textarea.style.left =
                '-9999px';

            document.body.appendChild(
                textarea
            );

            textarea.focus();

            textarea.select();

            try {

                document.execCommand(
                    'copy'
                );

                success();

            } catch ( error ) {}

            textarea.remove();

        }
    );

    </script>

    <?php

} );


/* =========================================================
 * ADMIN CSS
 * NATIVE WORDPRESS
 * ========================================================= */

add_action( 'admin_head', function() {

    ?>

    <style>

    /*
     * فقط استایل لازم برای textarea.
     * بقیه ظاهر کاملاً از WordPress گرفته می‌شود.
     */

    #gildata_article_code .inside {

        margin: 0;

        padding: 12px;

    }


    .gildata-code-admin textarea {

        display: block;

        width: 100%;

        min-height: 280px;

        resize: vertical;

        box-sizing: border-box;

        direction: ltr;

        text-align: left;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

        font-size: 13px;

        line-height: 1.7;

        tab-size: 4;

    }


    .gildata-code-shortcode-row {

        display: flex;

        align-items: center;

        gap: 8px;

        margin-top: 10px;

    }


    .gildata-code-shortcode-row code {

        padding:
            5px 8px;

        background:
            #f6f7f7;

        border:
            1px solid #dcdcde;

        border-radius:
            3px;

    }

    </style>

    <?php

} );


/* =========================================================
 * ADMIN COPY SHORTCODE
 * ========================================================= */

add_action( 'admin_footer', function() {

    ?>

    <script>

    document.addEventListener(
        'click',
        function( event ) {

            const button =
                event.target.closest(
                    '.gildata-copy-shortcode'
                );

            if ( ! button ) {
                return;
            }

            const code =
                button.getAttribute(
                    'data-code'
                );

            const copied = function() {

                const old =
                    button.textContent;

                button.textContent =
                    'کپی شد';

                setTimeout(
                    function() {

                        button.textContent =
                            old;

                    },
                    1500
                );

            };


            if (
                navigator.clipboard
                &&
                window.isSecureContext
            ) {

                navigator.clipboard
                    .writeText( code )
                    .then( copied );

            } else {

                const textarea =
                    document.createElement(
                        'textarea'
                    );

                textarea.value = code;

                document.body.appendChild(
                    textarea
                );

                textarea.select();

                document.execCommand(
                    'copy'
                );

                textarea.remove();

                copied();

            }

        }
    );

    </script>

    <?php

} );
</code> <button type="button" class="button gildata-copy-shortcode" data-code="
کد
/**
 * Gildata Article Code
 * Author: SAJAD.TAEB
 * Website: gildata.ir
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}


/* =========================================================
 * META BOX
 * ========================================================= */

add_action( 'add_meta_boxes', function() {

    add_meta_box(
        'gildata_article_code',
        'کد',
        'gildata_article_code_metabox',
        'post',
        'normal',
        'high'
    );

});


/* =========================================================
 * META BOX CONTENT
 * ========================================================= */

function gildata_article_code_metabox( $post ) {

    wp_nonce_field(
        'gildata_article_code_save',
        'gildata_article_code_nonce'
    );

    $code = get_post_meta(
        $post->ID,
        '_gildata_article_code',
        true
    );

    ?>

    <div class="gildata-code-admin">

        <p>
            <label
                for="gildata_article_code_field"
                style="font-weight:600;"
            >
                کد موردنظر را وارد کنید
            </label>
        </p>

        <textarea
            id="gildata_article_code_field"
            name="gildata_article_code"
            rows="16"
            spellcheck="false"
            placeholder="کد Java، PHP، JavaScript، CSS، HTML و ... را اینجا وارد کنید."
        ><?php echo esc_textarea( $code ); ?></textarea>

        <p class="description">
            این کد با شورتکد
            <code>[gildata_code]</code>
            داخل مقاله نمایش داده می‌شود.
        </p>

        <div class="gildata-code-shortcode-row">

            <code>[gildata_code]</code>

            <button
                type="button"
                class="button gildata-copy-shortcode"
                data-code="[gildata_code]"
            >
                کپی شورتکد
            </button>

        </div>

    </div>

    <?php
}


/* =========================================================
 * SAVE
 * ========================================================= */

add_action( 'save_post_post', function( $post_id ) {

    if (
        ! isset(
            $_POST['gildata_article_code_nonce']
        )
    ) {
        return;
    }

    if (
        ! wp_verify_nonce(
            sanitize_text_field(
                wp_unslash(
                    $_POST['gildata_article_code_nonce']
                )
            ),
            'gildata_article_code_save'
        )
    ) {
        return;
    }

    if (
        defined( 'DOING_AUTOSAVE' )
        && DOING_AUTOSAVE
    ) {
        return;
    }

    if (
        wp_is_post_revision( $post_id )
    ) {
        return;
    }

    if (
        ! current_user_can(
            'edit_post',
            $post_id
        )
    ) {
        return;
    }

    $code = isset(
        $_POST['gildata_article_code']
    )
        ? wp_unslash(
            $_POST['gildata_article_code']
        )
        : '';

    if (
        trim( $code ) === ''
    ) {

        delete_post_meta(
            $post_id,
            '_gildata_article_code'
        );

    } else {

        update_post_meta(
            $post_id,
            '_gildata_article_code',
            $code
        );

    }

} );


/* =========================================================
 * SHORTCODE
 * ========================================================= */

add_shortcode(
    'gildata_code',
    function() {

        if ( ! is_singular( 'post' ) ) {
            return '';
        }

        global $post;

        if ( ! $post ) {
            return '';
        }

        $code = get_post_meta(
            $post->ID,
            '_gildata_article_code',
            true
        );

        /*
         * اگر فیلد خالی باشد
         * هیچ خروجی نداشته باش.
         */

        if (
            trim( $code ) === ''
        ) {
            return '';
        }

        return gildata_render_code(
            $code
        );

    }
);


/* =========================================================
 * CODE RENDER
 * ========================================================= */

function gildata_render_code( $code ) {

    $code = str_replace(
        array(
            "rn",
            "r"
        ),
        "n",
        $code
    );

    $lines = explode(
        "n",
        $code
    );

    $numbers = '';

    foreach (
        $lines as $number => $line
    ) {

        $numbers .=
            '<span>' .
            esc_html(
                $number + 1
            ) .
            '</span>';

    }

    ob_start();

    ?>

    <div class="gildata-code-box">

        <div class="gildata-code-toolbar">

            <div class="gildata-code-title">

                <span class="gildata-code-dots">

                    <i></i>
                    <i></i>
                    <i></i>

                </span>

                <span>کد</span>

            </div>


            <button
                type="button"
                class="gildata-code-copy"
                aria-label="کپی کد"
            >

                <span class="gildata-copy-normal">
                    کپی کد
                </span>

                <span
                    class="gildata-copy-success"
                    hidden
                >
                    کپی شد ✓
                </span>

            </button>

        </div>


        <div class="gildata-code-area">

            <div
                class="gildata-code-lines"
                aria-hidden="true"
            >
                <?php echo $numbers; ?>
            </div>


            <pre
                class="gildata-code-content"
            ><?php echo esc_html( $code ); ?></pre>

        </div>

    </div>

    <?php

    return ob_get_clean();
}


/* =========================================================
 * FRONTEND CSS
 * BLACK / WHITE
 * ========================================================= */

add_action( 'wp_head', function() {

    ?>

    <style>

    .gildata-code-box {

        direction: ltr;

        width: 100%;

        margin: 32px 0;

        background: #0f0f0f;

        color: #fff;

        border: 1px solid #222;

        border-radius: 8px;

        overflow: hidden;

        box-sizing: border-box;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

    }


    /* Toolbar */

    .gildata-code-toolbar {

        min-height: 48px;

        padding: 0 12px;

        display: flex;

        align-items: center;

        justify-content: space-between;

        gap: 15px;

        background: #171717;

        border-bottom:
            1px solid #292929;

        box-sizing: border-box;

    }


    .gildata-code-title {

        display: flex;

        align-items: center;

        gap: 10px;

        color: #fff;

        font-family:
            Arial,
            Tahoma,
            sans-serif;

        font-size: 12px;

        font-weight: 600;

    }


    /* Mac dots */

    .gildata-code-dots {

        display: flex;

        gap: 5px;

    }


    .gildata-code-dots i {

        width: 8px;

        height: 8px;

        display: block;

        border-radius: 50%;

        background: #555;

    }


    /* Copy */

    .gildata-code-copy {

        appearance: none;

        border: 1px solid #3a3a3a;

        background: #222;

        color: #fff;

        border-radius: 5px;

        padding: 6px 10px;

        cursor: pointer;

        font-family:
            Tahoma,
            Arial,
            sans-serif;

        font-size: 11px;

        line-height: 1.5;

        transition:
            background .15s ease,
            border-color .15s ease;

    }


    .gildata-code-copy:hover {

        background: #2d2d2d;

        border-color: #555;

    }


    .gildata-code-copy.is-copied {

        background: #fff;

        color: #111;

        border-color: #fff;

    }


    /* Code area */

    .gildata-code-area {

        display: flex;

        width: 100%;

        max-height: 650px;

        overflow: auto;

        background: #0f0f0f;

    }


    /* Line numbers */

    .gildata-code-lines {

        flex: 0 0 50px;

        box-sizing: border-box;

        padding: 18px 10px;

        text-align: right;

        user-select: none;

        background: #0b0b0b;

        color: #555;

        border-right:
            1px solid #222;

        font-size: 12px;

        line-height: 1.8;

    }


    .gildata-code-lines span {

        display: block;

        height: 21.6px;

    }


    /* Code */

    .gildata-code-content {

        margin: 0;

        padding: 18px 20px;

        min-width: max-content;

        color: #f5f5f5;

        background: transparent;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

        font-size: 13px;

        line-height: 1.8;

        white-space: pre;

        tab-size: 4;

        text-align: left;

    }


    /* Scrollbar */

    .gildata-code-area::-webkit-scrollbar {

        width: 8px;

        height: 8px;

    }


    .gildata-code-area::-webkit-scrollbar-track {

        background: #080808;

    }


    .gildata-code-area::-webkit-scrollbar-thumb {

        background: #333;

        border-radius: 20px;

    }


    .gildata-code-area::-webkit-scrollbar-thumb:hover {

        background: #555;

    }


    /* Mobile */

    @media (max-width: 768px) {

        .gildata-code-box {

            border-radius: 6px;

            margin: 24px 0;

        }


        .gildata-code-toolbar {

            min-height: 46px;

        }


        .gildata-code-content {

            padding: 15px;

            font-size: 12px;

        }


        .gildata-code-lines {

            flex-basis: 40px;

            padding:
                15px 7px;

            font-size: 11px;

        }


        .gildata-code-copy {

            padding:
                5px 8px;

            font-size: 10px;

        }

    }

    </style>

    <?php

} );


/* =========================================================
 * FRONTEND JS
 * ========================================================= */

add_action( 'wp_footer', function() {

    ?>

    <script>

    document.addEventListener(
        'click',
        function( event ) {

            const button =
                event.target.closest(
                    '.gildata-code-copy'
                );

            if ( ! button ) {
                return;
            }

            const box =
                button.closest(
                    '.gildata-code-box'
                );

            if ( ! box ) {
                return;
            }

            const code =
                box.querySelector(
                    '.gildata-code-content'
                );

            if ( ! code ) {
                return;
            }

            const text =
                code.textContent;


            const success = function() {

                button.classList.add(
                    'is-copied'
                );

                const normal =
                    button.querySelector(
                        '.gildata-copy-normal'
                    );

                const copied =
                    button.querySelector(
                        '.gildata-copy-success'
                    );

                if ( normal ) {
                    normal.hidden = true;
                }

                if ( copied ) {
                    copied.hidden = false;
                }


                setTimeout(
                    function() {

                        button.classList.remove(
                            'is-copied'
                        );

                        if ( normal ) {
                            normal.hidden = false;
                        }

                        if ( copied ) {
                            copied.hidden = true;
                        }

                    },
                    1800
                );

            };


            if (
                navigator.clipboard
                &&
                window.isSecureContext
            ) {

                navigator.clipboard
                    .writeText( text )
                    .then( success );

                return;
            }


            const textarea =
                document.createElement(
                    'textarea'
                );

            textarea.value = text;

            textarea.style.position =
                'fixed';

            textarea.style.left =
                '-9999px';

            document.body.appendChild(
                textarea
            );

            textarea.focus();

            textarea.select();

            try {

                document.execCommand(
                    'copy'
                );

                success();

            } catch ( error ) {}

            textarea.remove();

        }
    );

    </script>

    <?php

} );


/* =========================================================
 * ADMIN CSS
 * NATIVE WORDPRESS
 * ========================================================= */

add_action( 'admin_head', function() {

    ?>

    <style>

    /*
     * فقط استایل لازم برای textarea.
     * بقیه ظاهر کاملاً از WordPress گرفته می‌شود.
     */

    #gildata_article_code .inside {

        margin: 0;

        padding: 12px;

    }


    .gildata-code-admin textarea {

        display: block;

        width: 100%;

        min-height: 280px;

        resize: vertical;

        box-sizing: border-box;

        direction: ltr;

        text-align: left;

        font-family:
            Consolas,
            Monaco,
            "Courier New",
            monospace;

        font-size: 13px;

        line-height: 1.7;

        tab-size: 4;

    }


    .gildata-code-shortcode-row {

        display: flex;

        align-items: center;

        gap: 8px;

        margin-top: 10px;

    }


    .gildata-code-shortcode-row code {

        padding:
            5px 8px;

        background:
            #f6f7f7;

        border:
            1px solid #dcdcde;

        border-radius:
            3px;

    }

    </style>

    <?php

} );


/* =========================================================
 * ADMIN COPY SHORTCODE
 * ========================================================= */

add_action( 'admin_footer', function() {

    ?>

    <script>

    document.addEventListener(
        'click',
        function( event ) {

            const button =
                event.target.closest(
                    '.gildata-copy-shortcode'
                );

            if ( ! button ) {
                return;
            }

            const code =
                button.getAttribute(
                    'data-code'
                );

            const copied = function() {

                const old =
                    button.textContent;

                button.textContent =
                    'کپی شد';

                setTimeout(
                    function() {

                        button.textContent =
                            old;

                    },
                    1500
                );

            };


            if (
                navigator.clipboard
                &&
                window.isSecureContext
            ) {

                navigator.clipboard
                    .writeText( code )
                    .then( copied );

            } else {

                const textarea =
                    document.createElement(
                        'textarea'
                    );

                textarea.value = code;

                document.body.appendChild(
                    textarea
                );

                textarea.select();

                document.execCommand(
                    'copy'
                );

                textarea.remove();

                copied();

            }

        }
    );

    </script>

    <?php

} );
" > کپی شورتکد </button> </div> </div> <?php } /* ========================================================= * SAVE * ========================================================= */ add_action( 'save_post_post', function( $post_id ) { if ( ! isset( $_POST['gildata_article_code_nonce'] ) ) { return; } if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['gildata_article_code_nonce'] ) ), 'gildata_article_code_save' ) ) { return; } if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } if ( wp_is_post_revision( $post_id ) ) { return; } if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } $code = isset( $_POST['gildata_article_code'] ) ? wp_unslash( $_POST['gildata_article_code'] ) : ''; if ( trim( $code ) === '' ) { delete_post_meta( $post_id, '_gildata_article_code' ); } else { update_post_meta( $post_id, '_gildata_article_code', $code ); } } ); /* ========================================================= * SHORTCODE * ========================================================= */ add_shortcode( 'gildata_code', function() { if ( ! is_singular( 'post' ) ) { return ''; } global $post; if ( ! $post ) { return ''; } $code = get_post_meta( $post->ID, '_gildata_article_code', true ); /* * اگر فیلد خالی باشد * هیچ خروجی نداشته باش. */ if ( trim( $code ) === '' ) { return ''; } return gildata_render_code( $code ); } ); /* ========================================================= * CODE RENDER * ========================================================= */ function gildata_render_code( $code ) { $code = str_replace( array( "rn", "r" ), "n", $code ); $lines = explode( "n", $code ); $numbers = ''; foreach ( $lines as $number => $line ) { $numbers .= '<span>' . esc_html( $number + 1 ) . '</span>'; } ob_start(); ?> <div class="gildata-code-box"> <div class="gildata-code-toolbar"> <div class="gildata-code-title"> <span class="gildata-code-dots"> <i></i> <i></i> <i></i> </span> <span>کد</span> </div> <button type="button" class="gildata-code-copy" aria-label="کپی کد" > <span class="gildata-copy-normal"> کپی کد </span> <span class="gildata-copy-success" hidden > کپی شد ✓ </span> </button> </div> <div class="gildata-code-area"> <div class="gildata-code-lines" aria-hidden="true" > <?php echo $numbers; ?> </div> <pre class="gildata-code-content" ><?php echo esc_html( $code ); ?></pre> </div> </div> <?php return ob_get_clean(); } /* ========================================================= * FRONTEND CSS * BLACK / WHITE * ========================================================= */ add_action( 'wp_head', function() { ?> <style> .gildata-code-box { direction: ltr; width: 100%; margin: 32px 0; background: #0f0f0f; color: #fff; border: 1px solid #222; border-radius: 8px; overflow: hidden; box-sizing: border-box; font-family: Consolas, Monaco, "Courier New", monospace; } /* Toolbar */ .gildata-code-toolbar { min-height: 48px; padding: 0 12px; display: flex; align-items: center; justify-content: space-between; gap: 15px; background: #171717; border-bottom: 1px solid #292929; box-sizing: border-box; } .gildata-code-title { display: flex; align-items: center; gap: 10px; color: #fff; font-family: Arial, Tahoma, sans-serif; font-size: 12px; font-weight: 600; } /* Mac dots */ .gildata-code-dots { display: flex; gap: 5px; } .gildata-code-dots i { width: 8px; height: 8px; display: block; border-radius: 50%; background: #555; } /* Copy */ .gildata-code-copy { appearance: none; border: 1px solid #3a3a3a; background: #222; color: #fff; border-radius: 5px; padding: 6px 10px; cursor: pointer; font-family: Tahoma, Arial, sans-serif; font-size: 11px; line-height: 1.5; transition: background .15s ease, border-color .15s ease; } .gildata-code-copy:hover { background: #2d2d2d; border-color: #555; } .gildata-code-copy.is-copied { background: #fff; color: #111; border-color: #fff; } /* Code area */ .gildata-code-area { display: flex; width: 100%; max-height: 650px; overflow: auto; background: #0f0f0f; } /* Line numbers */ .gildata-code-lines { flex: 0 0 50px; box-sizing: border-box; padding: 18px 10px; text-align: right; user-select: none; background: #0b0b0b; color: #555; border-right: 1px solid #222; font-size: 12px; line-height: 1.8; } .gildata-code-lines span { display: block; height: 21.6px; } /* Code */ .gildata-code-content { margin: 0; padding: 18px 20px; min-width: max-content; color: #f5f5f5; background: transparent; font-family: Consolas, Monaco, "Courier New", monospace; font-size: 13px; line-height: 1.8; white-space: pre; tab-size: 4; text-align: left; } /* Scrollbar */ .gildata-code-area::-webkit-scrollbar { width: 8px; height: 8px; } .gildata-code-area::-webkit-scrollbar-track { background: #080808; } .gildata-code-area::-webkit-scrollbar-thumb { background: #333; border-radius: 20px; } .gildata-code-area::-webkit-scrollbar-thumb:hover { background: #555; } /* Mobile */ @media (max-width: 768px) { .gildata-code-box { border-radius: 6px; margin: 24px 0; } .gildata-code-toolbar { min-height: 46px; } .gildata-code-content { padding: 15px; font-size: 12px; } .gildata-code-lines { flex-basis: 40px; padding: 15px 7px; font-size: 11px; } .gildata-code-copy { padding: 5px 8px; font-size: 10px; } } </style> <?php } ); /* ========================================================= * FRONTEND JS * ========================================================= */ add_action( 'wp_footer', function() { ?> <script> document.addEventListener( 'click', function( event ) { const button = event.target.closest( '.gildata-code-copy' ); if ( ! button ) { return; } const box = button.closest( '.gildata-code-box' ); if ( ! box ) { return; } const code = box.querySelector( '.gildata-code-content' ); if ( ! code ) { return; } const text = code.textContent; const success = function() { button.classList.add( 'is-copied' ); const normal = button.querySelector( '.gildata-copy-normal' ); const copied = button.querySelector( '.gildata-copy-success' ); if ( normal ) { normal.hidden = true; } if ( copied ) { copied.hidden = false; } setTimeout( function() { button.classList.remove( 'is-copied' ); if ( normal ) { normal.hidden = false; } if ( copied ) { copied.hidden = true; } }, 1800 ); }; if ( navigator.clipboard && window.isSecureContext ) { navigator.clipboard .writeText( text ) .then( success ); return; } const textarea = document.createElement( 'textarea' ); textarea.value = text; textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; document.body.appendChild( textarea ); textarea.focus(); textarea.select(); try { document.execCommand( 'copy' ); success(); } catch ( error ) {} textarea.remove(); } ); </script> <?php } ); /* ========================================================= * ADMIN CSS * NATIVE WORDPRESS * ========================================================= */ add_action( 'admin_head', function() { ?> <style> /* * فقط استایل لازم برای textarea. * بقیه ظاهر کاملاً از WordPress گرفته می‌شود. */ #gildata_article_code .inside { margin: 0; padding: 12px; } .gildata-code-admin textarea { display: block; width: 100%; min-height: 280px; resize: vertical; box-sizing: border-box; direction: ltr; text-align: left; font-family: Consolas, Monaco, "Courier New", monospace; font-size: 13px; line-height: 1.7; tab-size: 4; } .gildata-code-shortcode-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; } .gildata-code-shortcode-row code { padding: 5px 8px; background: #f6f7f7; border: 1px solid #dcdcde; border-radius: 3px; } </style> <?php } ); /* ========================================================= * ADMIN COPY SHORTCODE * ========================================================= */ add_action( 'admin_footer', function() { ?> <script> document.addEventListener( 'click', function( event ) { const button = event.target.closest( '.gildata-copy-shortcode' ); if ( ! button ) { return; } const code = button.getAttribute( 'data-code' ); const copied = function() { const old = button.textContent; button.textContent = 'کپی شد'; setTimeout( function() { button.textContent = old; }, 1500 ); }; if ( navigator.clipboard && window.isSecureContext ) { navigator.clipboard .writeText( code ) .then( copied ); } else { const textarea = document.createElement( 'textarea' ); textarea.value = code; document.body.appendChild( textarea ); textarea.select(); document.execCommand( 'copy' ); textarea.remove(); copied(); } } ); </script> <?php } );

🗄️ افزونه بررسی و پاکسازی دیتابیس وردپرس؛ شناسایی جداول اضافی، خالی و بلااستفاده

اگر سایت وردپرسی شما مدت زیادی فعال بوده، احتمالاً دیتابیس آن به مرور زمان با تعداد زیادی جدول مواجه شده است. نصب و حذف افزونه‌ها، تغییر قالب، استفاده از ووکامرس، افزونه‌های فروشگاهی، افزونه‌های سئو، فرم‌سازها و سایر ابزارهای وردپرس می‌تواند باعث ایجاد جدول‌هایی در دیتابیس شود که بعد از حذف افزونه همچنان باقی می‌مانند. این جدول‌ها در بسیاری از مواقع هیچ استفاده‌ای برای سایت ندارند و فقط باعث شلوغ شدن ساختار دیتابیس می‌شوند.

افزونه بررسی و پاکسازی دیتابیس وردپرس یک ابزار مدیریتی برای شناسایی و دسته‌بندی جداول دیتابیس است که به شما کمک می‌کند قبل از حذف هر جدول، وضعیت آن را مشاهده و بررسی کنید. این افزونه جداول دیتابیس را بر اساس وضعیت و مالک احتمالی آن‌ها دسته‌بندی کرده و جداول حساس مربوط به هسته وردپرس و جداول مورد استفاده را در برابر حذف محافظت می‌کند.

🎯 هدف اصلی این ابزار، فراهم کردن یک محیط ساده و قابل فهم برای بررسی دیتابیس وردپرس و شناسایی جداول اضافی است؛ بدون اینکه مدیر سایت مجبور باشد مستقیماً وارد phpMyAdmin شود و جدول‌ها را به صورت دستی بررسی کند.

🔍 بررسی کامل جداول دیتابیس وردپرس

پس از ورود به بخش مدیریت افزونه، جدول‌های موجود در دیتابیس سایت شناسایی و نمایش داده می‌شوند. برای هر جدول اطلاعات مهمی مانند نام جدول، حجم، تعداد رکوردها، مالک یا منبع احتمالی و وضعیت آن نمایش داده می‌شود.

سیستم دسته‌بندی افزونه باعث می‌شود مدیر سایت بتواند در یک نگاه تشخیص دهد که کدام جدول مربوط به هسته وردپرس است، کدام جدول توسط یک افزونه ایجاد شده و کدام جدول نیاز به بررسی بیشتر دارد.

این دسته‌بندی شامل وضعیت‌های مختلفی است:

🔵 هسته وردپرس
جدول‌هایی که متعلق به ساختار اصلی WordPress هستند با رنگ آبی نمایش داده می‌شوند. این جدول‌ها به صورت خودکار محافظت شده و امکان حذف آن‌ها از طریق ابزار حذف افزونه وجود ندارد.

🟢 استفاده‌شده
جدول‌هایی که شناسایی شده‌اند و به عنوان جدول مورد استفاده شناخته می‌شوند، با رنگ سبز نمایش داده شده و در برابر حذف محافظت می‌شوند.

🟤 خالی
جدول‌هایی که فاقد اطلاعات یا رکورد قابل استفاده هستند با رنگ قهوه‌ای مشخص می‌شوند. این جدول‌ها می‌توانند گزینه مناسبی برای بررسی و پاکسازی باشند.

🟠 بدون استفاده
جدول‌هایی که متعلق به افزونه‌ها یا بخش‌هایی هستند که دیگر مورد استفاده فعال سایت نیستند، در گروه بدون استفاده قرار می‌گیرند.

🔴 افزونه نصب نیست
اگر جدولی مربوط به افزونه‌ای باشد که دیگر در سایت نصب نیست، جدول با وضعیت «افزونه نصب نیست» نمایش داده می‌شود. این بخش یکی از کاربردی‌ترین قسمت‌های ابزار برای پیدا کردن بقایای افزونه‌های حذف‌شده است.

⚫ نامشخص
اگر سیستم نتواند مالک جدول را با اطمینان مشخص کند، جدول در گروه نامشخص قرار می‌گیرد. این جداول باید قبل از حذف با دقت بیشتری بررسی شوند.

🛡️ محافظت از جداول مهم

یکی از مهم‌ترین ویژگی‌های این ابزار، جلوگیری از حذف تصادفی جداول حساس است.

جداول مربوط به هسته وردپرس و جداولی که به عنوان مورد استفاده شناسایی شده‌اند، در وضعیت محافظت‌شده قرار می‌گیرند. بنابراین ابزار حذف فقط برای وضعیت‌هایی فعال است که در سیستم به عنوان موارد قابل حذف تعریف شده‌اند.

این ساختار باعث می‌شود مدیر سایت به جای مشاهده یک فهرست ساده از جداول، یک سیستم تفکیک‌شده برای مدیریت دیتابیس داشته باشد.

🗑️ حذف جدول با تأییدیه

حذف جدول دیتابیس یک عملیات حساس و غیرقابل بازگشت است. به همین دلیل افزونه قبل از حذف جدول، یک پنجره تأیید نمایش می‌دهد.

در این پنجره نام دقیق جدول و وضعیت آن نمایش داده شده و از مدیر سایت پرسیده می‌شود که آیا واقعاً قصد حذف جدول را دارد یا خیر.

این مرحله از حذف ناخواسته جلوگیری می‌کند و به مدیر سایت فرصت می‌دهد قبل از اجرای عملیات، نام جدول را یک بار دیگر بررسی کند.

⚠️ توجه داشته باشید که حذف جدول دیتابیس یک عملیات دائمی است و در صورت حذف اشتباه، بازگردانی اطلاعات فقط از طریق نسخه پشتیبان دیتابیس امکان‌پذیر خواهد بود.

📋 حذف چند جدول به صورت هم‌زمان

در صورتی که تعداد زیادی جدول اضافی شناسایی شده باشد، بررسی و حذف تک‌تک آن‌ها می‌تواند زمان‌بر باشد. این افزونه امکان انتخاب چند جدول قابل حذف و اجرای عملیات حذف گروهی را نیز فراهم می‌کند.

قبل از اجرای حذف گروهی، تأییدیه نمایش داده می‌شود تا مدیر سایت بتواند عملیات را تأیید یا لغو کند.

این قابلیت برای سایت‌هایی که در طول زمان افزونه‌های زیادی نصب و حذف کرده‌اند، بسیار کاربردی است.

🔎 جستجو و فیلتر جداول

وقتی دیتابیس یک سایت بزرگ شامل ده‌ها یا صدها جدول باشد، پیدا کردن جدول موردنظر از میان فهرست بسیار دشوار خواهد بود.

افزونه با ارائه قابلیت جستجو و فیلتر، امکان پیدا کردن سریع جدول‌ها را فراهم می‌کند. مدیر سایت می‌تواند بر اساس نام جدول یا وضعیت آن، موارد موردنظر خود را پیدا کرده و سریع‌تر فرآیند بررسی را انجام دهد.

این ویژگی به خصوص برای توسعه‌دهندگان وردپرس، مدیران سایت‌های فروشگاهی و افرادی که با سایت‌های بزرگ کار می‌کنند بسیار مفید است.

⚡ مناسب برای سایت‌های وردپرسی و ووکامرسی

در سایت‌های فروشگاهی معمولاً تعداد افزونه‌ها بیشتر از سایت‌های معمولی است. افزونه‌های پرداخت، حمل‌ونقل، حسابداری، انبارداری، سئو، پیامک، عضویت، فیلتر محصولات و ووکامرس می‌توانند هر کدام جداول اختصاصی خود را ایجاد کنند.

به همین دلیل بررسی دوره‌ای دیتابیس در سایت‌های ووکامرسی اهمیت بیشتری دارد.

این ابزار با شناسایی الگوهای رایج جداول وردپرس، ووکامرس و افزونه‌ها تلاش می‌کند منبع احتمالی جدول را مشخص کند تا مدیر سایت بتواند تصمیم دقیق‌تری برای نگهداری یا حذف آن بگیرد.

💾 قبل از پاکسازی حتماً نسخه پشتیبان تهیه کنید

پاکسازی دیتابیس باید با دقت انجام شود. توصیه می‌شود قبل از حذف هر جدول، یک نسخه پشتیبان کامل از دیتابیس تهیه کنید.

این افزونه وظیفه اصلی خود را روی شناسایی، دسته‌بندی و حذف کنترل‌شده جداول متمرکز کرده است و نباید جایگزین سیستم Backup سایت در نظر گرفته شود.

به‌خصوص قبل از پاکسازی گسترده یا حذف گروهی، بهتر است یک Backup سالم و قابل بازیابی در اختیار داشته باشید.

⚠️ وضعیت «نامشخص» را با دقت بررسی کنید

یکی از مهم‌ترین نکات هنگام استفاده از ابزارهای پاکسازی دیتابیس این است که هر جدول ناشناس الزاماً اضافی نیست.

ممکن است یک جدول توسط:

  • 🧩 افزونه اختصاصی سایت
  • 🎨 قالب اختصاصی
  • 🔌 اتصال به نرم‌افزار حسابداری
  • 🔗 API خارجی
  • 🛒 سیستم فروشگاهی اختصاصی
  • 📦 سیستم انبارداری
  • 📊 ابزار گزارش‌گیری
  • 👨‍💻 کد سفارشی توسعه‌دهنده

ایجاد شده باشد.

بنابراین جدول‌هایی که در وضعیت «نامشخص» قرار می‌گیرند باید قبل از حذف به صورت دستی بررسی شوند.

هدف افزونه این نیست که بدون بررسی همه جدول‌های ناشناس را حذف کند؛ بلکه هدف آن ارائه اطلاعات بهتر برای تصمیم‌گیری مدیر سایت است.

👨‍💻 مناسب برای توسعه‌دهندگان وردپرس

این افزونه تنها برای کاربران عادی مناسب نیست. توسعه‌دهندگان WordPress و WooCommerce نیز می‌توانند از آن برای بررسی سریع ساختار دیتابیس سایت‌های مشتریان استفاده کنند.

در پروژه‌هایی که تعداد زیادی افزونه نصب و حذف شده، معمولاً پیدا کردن جداول قدیمی از طریق phpMyAdmin زمان‌بر است. ابزار بررسی دیتابیس می‌تواند یک نمای مدیریتی ساده‌تر از وضعیت جداول ایجاد کند و فرآیند شناسایی موارد نیازمند بررسی را سریع‌تر کند.

🚀 مزایای اصلی افزونه

✅ بررسی جداول دیتابیس وردپرس
✅ نمایش وضعیت هر جدول
✅ شناسایی جداول هسته وردپرس
✅ محافظت از جداول مهم
✅ شناسایی جداول خالی
✅ شناسایی جداول بدون استفاده
✅ شناسایی جداول مربوط به افزونه‌های حذف‌شده
✅ نمایش جداول ناشناخته برای بررسی بیشتر
✅ نمایش حجم جداول
✅ نمایش تعداد رکوردها
✅ جستجوی سریع بین جداول
✅ فیلتر بر اساس وضعیت
✅ حذف تکی جدول
✅ حذف گروهی جداول قابل حذف
✅ تأییدیه قبل از حذف
✅ جلوگیری از حذف جداول محافظت‌شده
✅ رابط کاربری راست‌چین و مناسب مدیریت وردپرس
✅ مناسب برای سایت‌های WordPress و WooCommerce
✅ مناسب برای مدیران سایت و توسعه‌دهندگان

🎯 چه زمانی از این افزونه استفاده کنیم؟

بهتر است بررسی دیتابیس را به عنوان بخشی از نگهداری دوره‌ای سایت در نظر بگیرید.

برای مثال، پس از حذف تعداد زیادی افزونه، تغییر قالب، بازطراحی سایت، انتقال سایت، مهاجرت از یک سیستم قدیمی یا انجام تغییرات گسترده در WooCommerce، می‌توانید دیتابیس را بررسی کنید.

با این حال، توصیه نمی‌شود فقط به دلیل مشاهده یک جدول ناشناس آن را حذف کنید. ابتدا مالک جدول و کاربرد آن را مشخص کنید و سپس در صورت اطمینان از عدم نیاز، عملیات حذف را انجام دهید.

📖 راهنمای استفاده

مرحله اول؛ ورود به مدیریت وردپرس

پس از فعال‌سازی افزونه، وارد پنل مدیریت WordPress شوید و از منوی مربوط به بررسی دیتابیس وارد صفحه ابزار شوید.

مرحله دوم؛ بررسی فهرست جداول

در صفحه، فهرست جداول دیتابیس نمایش داده می‌شود. وضعیت هر جدول را با رنگ مربوط به آن مشاهده کنید.

مرحله سوم؛ بررسی جدول‌های قابل حذف

تمرکز اصلی خود را روی وضعیت‌های زیر قرار دهید:

🟤 خالی
🟠 بدون استفاده
🔴 افزونه نصب نیست
⚫ نامشخص

سه وضعیت اول معمولاً گزینه‌های مناسب‌تری برای بررسی حذف هستند؛ وضعیت نامشخص نیازمند بررسی دستی است.

مرحله چهارم؛ بررسی جدول

قبل از حذف، نام کامل جدول، وضعیت، حجم و تعداد رکوردها را بررسی کنید.

مرحله پنجم؛ تهیه Backup

قبل از حذف چند جدول یا انجام پاکسازی گسترده، حتماً نسخه پشتیبان دیتابیس تهیه کنید.

مرحله ششم؛ حذف جدول

روی گزینه حذف جدول موردنظر کلیک کنید. پنجره تأیید نمایش داده می‌شود. در صورت اطمینان، عملیات حذف را تأیید کنید.

مرحله هفتم؛ حذف گروهی

اگر چند جدول قابل حذف را شناسایی کرده‌اید، آن‌ها را انتخاب کرده و عملیات حذف گروهی را اجرا کنید. سیستم قبل از اجرای عملیات از شما تأیید می‌گیرد.

❓ آیا این افزونه جداول هسته وردپرس را حذف می‌کند؟

خیر. جداول شناسایی‌شده به عنوان هسته وردپرس در وضعیت محافظت‌شده قرار می‌گیرند و از طریق سیستم حذف افزونه قابل حذف نیستند.

❓ آیا همه جداول ناشناس را باید حذف کرد؟

خیر. وضعیت «نامشخص» به معنی «اضافی» نیست. ممکن است جدول مربوط به یک افزونه اختصاصی، قالب یا سیستم خارجی باشد. قبل از حذف حتماً آن را بررسی کنید.

❓ آیا حذف جدول قابل بازگشت است؟

خود عملیات حذف جدول برگشت‌پذیر نیست. برای بازیابی اطلاعات حذف‌شده باید از Backup دیتابیس استفاده کنید.

❓ آیا افزونه برای WooCommerce مناسب است؟

بله. ساختار تشخیص جدول برای محیط‌های WordPress و WooCommerce نیز در نظر گرفته شده و می‌تواند برای بررسی دیتابیس فروشگاه‌های اینترنتی مورد استفاده قرار گیرد.

🏆 جمع‌بندی

افزونه بررسی و پاکسازی دیتابیس وردپرس ابزاری کاربردی برای مدیران سایت، توسعه‌دهندگان و مدیران فروشگاه‌های WooCommerce است که می‌خواهند وضعیت جداول دیتابیس خود را بهتر بشناسند و جداول اضافی را با کنترل بیشتری مدیریت کنند.

با دسته‌بندی جداول به وضعیت‌های هسته وردپرس، استفاده‌شده، خالی، بدون استفاده، افزونه نصب نیست و نامشخص، بررسی دیتابیس بسیار ساده‌تر می‌شود. همچنین سیستم محافظت از جداول مهم و نمایش تأییدیه قبل از حذف، ریسک حذف تصادفی اطلاعات حساس را کاهش می‌دهد.

اگر سایت شما در طول زمان افزونه‌ها و قالب‌های مختلفی را تجربه کرده است، بررسی دوره‌ای دیتابیس می‌تواند به شناسایی بقایای افزونه‌های قدیمی و جداولی که دیگر مورد نیاز نیستند کمک کند.

🔐 همیشه قبل از پاکسازی دیتابیس نسخه پشتیبان تهیه کنید و جداول نامشخص را بدون بررسی حذف نکنید.