Új hozzászólás Aktív témák

  • miqlas

    őstag

    válasz kerepesig #9275 üzenetére

    Csináltattam egyet a ChatGPT-vel!
    Az attachment típusú képeket a postmeta táblában is keresi, ahol a kép URL-je (guid) előfordulhat.
    Ez különösen fontos, ha képeket egyedi mezők (pl. ACF, egyedi plugin) tárolnak, nem csak HTML-ként vannak beágyazva.

    Csinálj belõle egy zip file-t, azt töltsd fel pluginként.

    <?php
    /**
    * Plugin Name: Unused Image Cleaner
    * Description: Listázza azokat a képeket, amelyeket nem használ egyik bejegyzés vagy meta mező sem. Választható törlés.
    * Version: 1.1
    * Author: ChatGPT
    */
    if (!defined('ABSPATH')) exit;
    add_action('admin_menu', function () {
    add_menu_page(
    'Unused Image Cleaner',
    'Unused Images',
    'manage_options',
    'unused-image-cleaner',
    'uic_render_admin_page',
    'dashicons-trash',
    80
    );
    });
    function uic_render_admin_page() {
    global $wpdb;
    echo '<div class="wrap"><h1>Nem használt képek</h1>';
    if (isset($_POST['delete_images']) && !empty($_POST['image_ids'])) {
    $deleted = 0;
    foreach ($_POST['image_ids'] as $id) {
    if (wp_delete_attachment((int)$id, true)) {
    $deleted++;
    }
    }
    echo '<div class="updated notice"><p>' . $deleted . ' kép törölve.</p></div>';
    }
    $attachments = $wpdb->get_results("
    SELECT ID, guid, post_title
    FROM {$wpdb->prefix}posts
    WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'
    ");
    $unused_images = [];
    foreach ($attachments as $att) {
    $image_url = esc_url($att->guid);
    // Ellenőrzés post_content-ben
    $used_in_posts = $wpdb->get_var($wpdb->prepare("
    SELECT COUNT(*) FROM {$wpdb->prefix}posts
    WHERE post_content LIKE %s
    ", '%' . $wpdb->esc_like($image_url) . '%'));
    // Ellenőrzés postmeta mezőkben
    $used_in_meta = $wpdb->get_var($wpdb->prepare("
    SELECT COUNT(*) FROM {$wpdb->prefix}postmeta
    WHERE meta_value LIKE %s
    ", '%' . $wpdb->esc_like($image_url) . '%'));
    if (!$used_in_posts && !$used_in_meta) {
    $unused_images[] = $att;
    }
    }
    if (empty($unused_images)) {
    echo '<p><strong>Minden kép használatban van.</strong></p>';
    } else {
    echo '<form method="post"><table class="widefat"><thead><tr><th></th><th>Kép</th><th>Fájl</th></tr></thead><tbody>';
    foreach ($unused_images as $img) {
    echo '<tr>
    <td><input type="checkbox" name="image_ids[]" value="' . esc_attr($img->ID) . '"></td>
    <td><img src="' . esc_url($img->guid) . '" style="max-width:100px;height:auto;"></td>
    <td>' . esc_html($img->post_title) . '</td>
    </tr>';
    }
    echo '</tbody></table>';
    echo '<p><input type="submit" name="delete_images" class="button button-primary" value="Kiválasztott képek törlése"></p>';
    echo '</form>';
    }
    echo '</div>';
    }

Új hozzászólás Aktív témák