web-dev-qa-db-ja.com

フロントエンドからの投稿と添付ファイルを完全に削除する

フロントエンドから投稿を削除する方法はありますか、それは永久に添付ファイルですか?これは、投稿をゴミ箱に移動するスニペットですが、添付された画像は削除されず(サーバー上に残ります)、永久に削除されませんか?誰かが助けてもらえますか?

<?php 
$url = get_bloginfo('url');
if (current_user_can('edit_post', $post->ID)){
echo '<a class="delete-post" href="';
echo wp_nonce_url("$url/wp-admin/post.php?action=delete&post=$id", 'delete-post_' . $post- 
>ID);
echo '">Delete post</a>';
}
?>
2
jimilesku

試してください:

<?php if (current_user_can('edit_post', $post->ID)) echo "<a href='" . wp_nonce_url("/wp-admin/post.php?action=delete&amp;post=$id", 'delete-post_' . $post->ID) . "'>Delete post</a>" ?>

WordPressのルートディレクトリのwp-config.phpファイルにこのコードを追加することで、いつWordPressのゴミ箱を空にするかを決めることができます。

define('EMPTY_TRASH_DAYS', 1 );

コードの1は、毎日ゴミ箱を空にしたいことを意味します。 0に設定すると、ゴミ箱機能は無効になります。

最後に、WordPressは画像がページに添付されなくなっても削除しません。説明についてはこのチケットを参照してください。 http://core.trac.wordpress.org/ticket/12108

メディアファイルは他の投稿でも使用されている可能性があるため、メディアライブラリでそれらを削除する必要があります。投稿からファイルを削除するとシステムから完全に削除されるように変更した場合、既存の動作が中断され、意図しない削除が多数発生します。

もしその合理的な理由に反対したいのであれば、これを自分のfunctions.phpに追加することができます。

function delete_post_children($post_id) {
    global $wpdb;

    $ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_parent = $post_id AND post_type = 'attachment'");

    foreach ( $ids as $id )
        wp_delete_attachment($id);
}
add_action('delete_post', 'delete_post_children');

添付されていない画像を削除するためにプラグインルートを使いたい場合は、Upload Janitor も参照してください。

2
two7s_clash

データベースを手動で呼び出す必要はありません。これも機能します。

add_action( 'delete_post', 'delete_post_children' );

function delete_post_children( $post_id )
{
    foreach( get_attached_media( '', $post_id ) as $attachment )

        wp_delete_attachment( $attachment->ID );
}
0
user16124