পৃষ্ঠা মুছে ফেলার পরে অ্যাসোসিয়েটেড মিডিয়া মুছুন


9

বিঃদ্রঃ

আপনার নিজের ঝুঁকিতে ব্যবহার করুন, এটি বগি এবং আমি কয়েকটি দৃষ্টান্তে দৌড়েছি যেখানে এটি সমস্ত সংযুক্তি মুছবে। অনিশ্চিত কেন।

পৃষ্ঠাটি মুছে ফেলা হলে কী কোনও পৃষ্ঠার সাথে সম্পর্কিত মিডিয়া মুছে ফেলা সম্ভব? আমি জানি যে সন্নিবেশ মিডিয়া পৃষ্ঠাতে আপনি "এই পৃষ্ঠায় আপলোড করা" ছবিগুলি দ্বারা ফিল্টার করতে পারেন তাই আমি কী তাদের একটি তালিকা পেতে এবং কেবল পৃষ্ঠা মুছে ফেলা হচ্ছে সেগুলি মুছতে পারি?

এই মুহুর্তে আমি মুছুন পোস্টে হুকিং দিয়ে চারপাশে খেলছি। এখনই ... এটি কিছুই করে না বলে আমি মনে করি আমি এটি নিয়ে কোথাও পাচ্ছি।

function del_post_media($pid) {
    $query = "DELETE FROM wp_postmeta
            WHERE ".$pid." IN
            (
            SELECT id
            FROM wp_posts
            WHERE post_type = 'attachment'
            )";
    global $wpdb;
    if ($wpdb->get_var($wpdb->prepare($query))) {
        return $wpdb->query($wpdb->prepare($query));
    }
    return true;
}
add_action('delete_post', 'del_post_media');

1
অন্য কোথাও ব্যবহার করা হয় এমন মিডিয়া সম্পর্কিত উল্লেখগুলি মুছে ফেলার বিষয়ে সাবধান হন যেমন অন্য পোস্টগুলি বা আপনার পোস্টটি যদি সোশ্যাল মিডিয়ায় ভাগ করা থাকে।
গিলবার্ট

ঠিক আছে যদি আমি ব্যবহারকারীকে একই চিত্রটি দুইবার আপলোড করতে বাধ্য করি (যদি তারা 2 টি ভিন্ন পৃষ্ঠার জন্য একই চিত্র চায়) তবে এটি চিত্রটির একটির নাম পরিবর্তন করে দেবে, তাই এটি ঠিক করা উচিত।
হাওডি_এমসিজি

উত্তর:


8

এ কেমন? এটি get_posts () ফাংশন রেফারেন্স পৃষ্ঠাতে একটি উদাহরণ গ্রহণ করে ।

function delete_post_media( $post_id ) {

    $attachments = get_posts( array(
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'any',
        'post_parent'    => $post_id
    ) );

    foreach ( $attachments as $attachment ) {
        if ( false === wp_delete_attachment( $attachment->ID ) ) {
            // Log failure to delete attachment.
        }
    }
}

add_action( 'before_delete_post', 'delete_post_media' );

1
আমার পক্ষে কাজ করেনি। পোস্ট সংযুক্ত 1 টি চিত্র, ট্র্যাশড পোস্ট, খালি ট্র্যাশ তৈরি করা হয়েছে। চিত্রটি এখনও মিডিয়া লাইব্রেরিতে রয়েছে। সম্পাদনা: ওহো এটি অ্যাড-অ্যাকশন অংশটি হারিয়েছে
মাইকেল রজার্স 19

8

আমি মনে করি আপনি এই জাতীয় কিছু খুঁজছেন ...?

function delete_associated_media($id) {
    // check if page
    if ('page' !== get_post_type($id)) return;

    $media = get_children(array(
        'post_parent' => $id,
        'post_type' => 'attachment'
    ));
    if (empty($media)) return;

    foreach ($media as $file) {
        // pick what you want to do
        wp_delete_attachment($file->ID);
        unlink(get_attached_file($file->ID));
    }
}
add_action('before_delete_post', 'delete_associated_media');

আমার জন্য কিছুই করে না অপরিবর্তিত মিডিয়াতে পোস্টের ফলাফলগুলি যথারীতি মোছা এটি মুছবে না।
মাইকেল রজারস 19

আপনি কোডটি মানিয়ে না নিলে এটি কেবল পৃষ্ঠাগুলির জন্য। আপনি তা দেখেছেন, ঠিক আছে, @ মাইকেল রাজারস?
tfrommen

আফসোস হ'ল তো!
মাইকেল রজার্স 16
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.