すべての添付ファイル付きの投稿を削除しようとしています。これは私が今思いついた機能です。
function remove_post(){
if(isset($_POST['post_id']) && is_numeric($_POST['post_id'])){
$post = get_post($_POST['post_id']);
if(get_current_user_id() == $post->post_author){ echo 'ee';
wp_delete_post($_POST['post_id']);
}
}
exit;
}
これで投稿は削除されますが、その投稿への添付ファイルへのリンクは削除されず、削除も難しくなりません。投稿はゴミ箱に残ります。それで、あなたはどう思いますか?ありがとう。
たぶんこれは動作します
function remove_post() {
if(isset($_POST['post_id']) && is_numeric($_POST['post_id'])) {
$post = get_post($_POST['post_id']);
if(get_current_user_id() == $post->post_author) {
$args = array(
'post_parent' => $_POST['post_id']
);
$post_attachments = get_children($args);
if($post_attachments) {
foreach ($post_attachments as $attachment) {
wp_delete_attachment($attachment->ID, true);
}
}
wp_delete_post($_POST['post_id'], true);
}
}
exit;
}
追加されたコード
function get_attachment_id_from_src ($image_src) {
global $wpdb;
$query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'";
$id = $wpdb->get_var($query);
return $id;
}
if(!empty($_POST['avatar_id']) && $_POST['avatar_id'] != get_user_meta($current_user->id, 'custom_avatar', true) && empty( $_POST['remove_avatar'])) {
update_user_meta($current_user->id, 'custom_avatar', esc_attr( $_POST['avatar_id']));
} elseif(!empty( $_POST['remove_avatar']) && $_POST['remove_avatar'] == 1) {
$avatar_url = get_user_meta($current_user->id, 'custom_avatar', true);
$attachment_delete = get_attachment_id_from_src($avatar_url);
wp_delete_attachment($attachment_delete, true);
update_user_meta( $current_user->id, 'custom_avatar', '-1');
}