web-dev-qa-db-fra.com

Comment détacher des images des publications?

J'ai d'abord vu des sujets comme ceci , mais ils ne m'ont pas aidé.


 enter image description here 

Et pour montrer ces images attachées, j'ai utilisé le code suivant dans le fichier single.php:

if ( have_posts() ) : while ( have_posts() ) : the_post();           
    $args = array(
        'post_type'   => 'attachment',
        'numberposts' => -1,
        'post_status' => null,
        'post_parent' => $post->ID
    );      
    $attachments = get_posts( $args );
    if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
            echo '<li>';
            echo wp_get_attachment_image( $attachment->ID, 'full' );
            echo '<p>';
            echo apply_filters( 'the_title', $attachment->post_title );
            echo '</p></li>';
        }
    }       
endwhile; endif;

Cela montre les images jointes et fonctionne bien.

Le problème:

Lorsque je supprime une image jointe d'un message:

 enter image description here 

L'image supprimée existe toujours dans ce post!

Comment puis-je détacher complètement les images des publications?

P.S. J'ai aussi essayé Ctrl + F5

4
Hamed Kamrava

Si vous affichez la médiathèque dans la liste list mode:

/wp-admin/upload.php?mode=list

vous verrez alors les liens Attach / Detach pour chaque pièce jointe.

Chaque pièce jointe ne peut être attachée qu'à un seul parent via le champ post_parent de la table wp_posst.

Supprimer une image de l'éditeur de publication ne changera pas le champ post_parent à 0.

Rendre la vie un peu plus facile!

Ce serait bien de pouvoir le faire dans la vue Media View popup lors de l'édition d'un message, car sa recherche peut prendre beaucoup de temps dans la médiathèque.

 Custom link 

Tout d'abord, nous construisons un micro-modèle Backbone personnalisé, que nous ajouterons au Détails de la pièce jointe :

<script type="text/html" id="tmpl-wpse-open-in-library">
    <div class="wpse-open-in-library">
        <a href="<?php echo admin_url('upload.php?mode=list&p=');?>{{ data.id }}" target="_blank">
             <?php _e( 'Open in Media Library' ); ?>
        </a>
    </div>
</script>

{{ data.id }} est l'ID de la pièce jointe actuelle.

Voici comment nous l'insérons après le Supprimer la pièce jointe link:

$( wp.media.template('wpse-open-in-library')(
      { 
         id: attachment.get( 'id' )  // <-- This is how we can fetch the current ID 
      }
    ) 
 ).insertAfter('.delete-attachment');

où nous passons la variable id à notre modèle micro personnalisé.

Notez que nous pouvons voir tous les fichiers joints en sélectionnant l’option suivante:

 attached files 

Plugin de démonstration

Voici l'intégralité du plugin de démonstration:

/**
 * Open an attachment in the Media Library, to be able to attach/detach it
 *
 * @link https://wordpress.stackexchange.com/a/206179/26350
 */
add_action( 'print_media_templates', function()
{ ?>

  <!-- Custom template part -->
  <script type="text/html" id="tmpl-wpse-open-in-library">
        <div class="wpse-open-in-library">
            <a href="<?php echo admin_url('upload.php?mode=list&p=');?>{{ data.id }}" target="_blank">
                <?php _e( 'Open in Media Library' ); ?>
           </a>
       </div>
  </script>

  <!-- Extend the Attachment Details View -->
  <script>
      jQuery(document).ready( function( $ ) 
      {
          wp.media.view.Settings.AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay.extend(
          {
              render: function() 
              {
                  wp.media.View.prototype.render.apply( this, arguments );
                  var attachment = this.options.attachment;
                  $( wp.media.template('wpse-open-in-library')(
                        { 
                            id: attachment.get( 'id' ) 
                        }
                     ) 
                  ).insertAfter('.delete-attachment');

                return this;
            }
      } );
    } );
  </script>
<?php
} );

Cette réponse de @ kalimah-apps et les réponses ici de @bonger et @Fabien Quatravaux, ont été d’une grande aide pour la construction de ce plugin de démonstration.

La prochaine étape serait d’ajouter le Detach link, pour que ce soit encore plus simple ;-)

12
birgire