J'ai d'abord vu des sujets comme ceci , mais ils ne m'ont pas aidé.
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:
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
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.
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.
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>
où {{ 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:
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 ;-)