Remarque
Utilisez-le à vos risques et périls, il est bogué et j’ai rencontré quelques cas où il effacerait TOUTES les pièces jointes. Je ne sais pas pourquoi.
Est-il possible de supprimer un média associé à une page lorsque cette page est supprimée? Je sais que dans la page Insérer un média, vous pouvez filtrer par images "Téléchargées sur cette page". Pourrais-je donc en obtenir une liste et les supprimer simplement pendant la suppression de la page?
En ce moment, je joue avec accrocher dans Delete Post. En ce moment ... ça ne fait rien mais je pense que je vais quelque part avec ça.
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');
Que dis-tu de ça? Il adapte un exemple sur la page de référence 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' );
Je suppose que vous cherchez quelque chose comme ça ...?
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');