web-dev-qa-db-ja.com

メディアライブラリから画像を一括削除する方法

あなたの助けが必要です。 SQLクエリを使用してカスタム投稿タイプ( 'book')から添付ファイルを一括削除しようとしています。私はこのスニペットをワードプレスフォームで見つけました: Wordpress.org

私は自分のローカルコンピュータでそれをテストしました、そしてそれは私のメディアライブラリからすべての添付ファイルを削除します。さて、私のカスタム投稿タイプ「book」からの添付ファイル(注目の画像とサムネイル)のみをターゲットにするようにクエリを設定してください。

ありがとう

1
user51781

あなたはこのようなネイティブのWordPressコーデックス呼び出しでそれをすることができます(source -すべて/

<?php
/*  create this code in a file in the main wordpress directory e.g. delmedia.php
and access it via mydomain.com/delmedia.php
*/
// Include the wp-load'er
include('wp-load.php');
$args= array(
'post_type'      => 'book', // obvious
'posts_per_page' => -1            // get them all 
);

// get all attachments post ids
$posts = get_posts( $args );
foreach ($posts as $post_id) {
   // get an array of image data
   $image_attributes = wp_get_attachment_image_src( $post_id->ID );
   if (strpos($image_attributes[0], 'mystring') !== FALSE){
   echo 'Image Found : '.$image_attributes[0];
   if (false === wp_delete_attachment( wp_delete_attachment( $post_id->ID, true     ) ) ) {
       echo ' and delete failed!<br>';
     } else {
       echo ' and delete succeeded!<br>';
     }
   }
}
?>
1
user57429

ここで2つの方法を組み合わせる:

$args = array(
'post_type' => 'attachment',
'numberposts' => null,
'post_status' => null,
'post_parent' => $post_id
);

$attachments = get_posts($args);
if ($attachments) {
DELETE FROM wp_postmeta
WHERE post_id IN
(
SELECT id
FROM wp_posts
    WHERE (post_type = 'book')
)
;
    }
};

その後:

DELETE FROM wp_posts WHERE (post_type = 'book')

これにより、添付ファイルと書籍を組み合わせた投稿タイプが表示されます。

0
eyoung100