web-dev-qa-db-fra.com

Supprimer l'image de l'article supprime également la photo de la bibliothèque multimédia

Existe-t-il un moyen simple de supprimer une image de l'éditeur de publication et de la bibliothèque multimédia?

enter image description here

2
Gregory Schultz

Je ne sais pas s'il existe une solution de facilité, mais vous pouvez le faire pour atteindre les objectifs suivants:

Introduisez un admin js dans votre functions.php comme ceci:

//Admin JS
add_action('admin_init', 'custom_admin_js');
function custom_admin_js() {
    wp_register_script( 'admin-js', get_stylesheet_directory_uri() . '/js/admin.js' );
    wp_enqueue_script( 'admin-js' );
} 

Le fichier js ira dans le thème que vous utilisez créez un autre dossier à l'intérieur de js appelé s'il n'existe pas et à l'intérieur du fichier js ce code:

jQuery(document).ready(function($){
    setTimeout(function(){
        var iframeBody = $('body', $('#content_ifr')[0].contentWindow.document);
        $(iframeBody).on('click mousedown', 'img', function(event) {
            var getThisClass = $(this).attr("class").match(/\d+$/)[0];
            var putToThis = $('.mce-toolbar-grp').find($('div:last-child').attr('aria-label', 'Remove').find('button'));
            $(putToThis).attr("att-id", getThisClass);
            $(putToThis).attr("class", "remove-for-good");
        });
     }, 2000);
     $(document).on("click", ".remove-for-good", function(){
        var thisID = $(this).attr("att-id");
        if (confirm('Warning! Remove from Media Also?.')) {
        $.ajax({
                type: 'POST',
                url: ajaxurl,
                data: {
                    action: 'remove_for_good_att',
                    attid: thisID,
                    post_type: 'attachment'
                },
                success: function( html ) {
                    alert( "Sucessfully removed from media also." );
                    $(".media-modal .media-frame-content ul").find($("li.attachment[data-id='" + html + "']")).remove();
                }
            });
        }
      }); 
});

Enfin cette fonction pour effectuer un appel ajax, cela va aussi dans functions.php

function remove_for_good_att($post){
    global $wpdb;
    $att_id = $_POST['attid'];
    //$ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_parent = $att_id AND post_type = 'attachment'");

    //header( "Content-Type: application/json" );
    if( current_user_can('administrator') ) {
            wp_delete_attachment( $att_id, true );
            print $att_id;
        }
    die();
}
add_action('wp_ajax_remove_for_good_att', 'remove_for_good_att');

Si c'est trop pour vous, vous pouvez télécharger un plugin créé à cet effet à partir de ce lien: https://github.com/mysticalghoul/Wordpress-Remove-image-attachment-from- éditeur

Veuillez utiliser la dernière version de Wordpress. Je l'ai testé sur 4.9 et ça marche

Laissez-moi savoir si cela fonctionne!

3
mysticalghoul