问题描述
注意
使用自己的风险,它是错误的,我已经运行了几个实例,它会删除所有附件。不确定为什么
当该页面被删除时,是否可以删除与页面相关联的媒体?我知道在 「插入媒体」 页面中,您可以通过图片 「上传到此页面」 进行过滤,因此我可以在列表中删除这些列表,并将其删除?
现在我正在玩 「删除邮报」 。现在,它什么都不做,但我觉得我正在某处去。
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');
最佳解决方法
这个怎么样?它适用于 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.
}
}
}
次佳解决方法
我想你在找这样的东西?
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');
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。