पृष्ठ हटाए जाने पर संबद्ध मीडिया हटाएं


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 अलग-अलग पृष्ठों के लिए एक ही छवि चाहते हैं) तो यह किसी एक चित्र का नाम बदल देगा, इसलिए यह ठीक होना चाहिए।
Howdy_McGee

जवाबों:


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 छवि, ट्रैश किए गए पोस्ट, खाली कचरा है। मीडिया लाइब्रेरी पर अब भी छवि बनी हुई है। संपादित करें: ओह यह add_action हिस्सा याद कर रहा है
माइकल रोजर्स 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');

मेरे लिए कुछ नहीं करता। असंबद्ध मीडिया पर पोस्ट के परिणाम को हमेशा की तरह हटाने से इसे हटाया नहीं जाता है।
माइकल रोजर्स

जब तक आपने कोड को अनुकूलित नहीं किया, यह केवल पृष्ठों के लिए है। आपने देखा कि, ठीक है, @MichaelRogers?
tfrommen

समझे तब माफ करना!
माइकल रोजर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.