web-dev-qa-db-ja.com

WP-CLIまたは他の自動化プロセスを使用して、未添付のイメージをすべて一括削除する方法を教えてください。

各言語の各画像の複製を作成するプラグインであるWPMLメディアを使用した後、使用する予定のない約10万の複製画像が手に入り、それを取り除く必要があります。

これらをファイルシステム自体から削除するだけでなく、メディアギャラリーを介して手動で削除する場合に通常発生するように、データベース内のすべての参照を削除するようにする必要があります。

可能であれば、WP-CLIソリューションを探しています。この解決方法は非常に役に立ちましたが、システム内で未接続/未使用のイメージだけでなく、すべてのイメージを処理します。

WP-CLIを使用してメディアと添付ファイルを一括削除する方法を教えてください。

別の解決策を考えた場合、OPは、SQLを使用して最終的に解決策を達成したとコメントしました。

何千もの未添付画像を削除するにはどうすればいいですか?

私はコマンドラインやmysqlに慣れていませんが、データベースの整合性を維持するためのクエリを作成するためのWPテーブルに精通していません。そうであれば、純粋なデータベース関連の解決策、またはシステムにフックして「ワードプレス」の方法で物事を進めるPHPスクリプトを提案してください。

私はプラグインベースのソリューションを探していません。私はDNUI、DX Delete Attached Media、そしてすべてがひどく終わった他のスコアを試してみました。

更新:画像が添付されているかどうかを判断するために "parent = 0"を使用することは非常に賢い解決策であり、私はそれを答えとしてマークしました。

投稿内で画像を合法的に使用する方法がありますが、それでも親は0です。メディアライブラリの画像の詳細にアクセスして、画像ソースのURL全体をコピーして手動で投稿に貼り付けるときです。 承認された回答の解決策はこれらも削除します。 そのため、これを考慮に入れる他の解決策も奨励したいと思います。

おそらく、wp-cli search-replaceが使用するアルゴリズムと同様に、データベースをスキャンしてイメージ名のインスタンスを見つける必要があります。

4
user658182

@somethingによってリンクされている回答に対して、この(未テストの)修正を試すことができます

wp post delete $(wp post list --post_type='attachment' --format=ids --post_parent=0)

添付ファイルを削除するには 親なしで

特定のmime typeをターゲットにするには、例えばimage/jpeg試してください:

wp post delete $(wp post list --post_type='attachment' \
    --format=ids --post_parent=0 --post_mime_type='image/jpeg')

ノート:

  • テストの前に最初にバックアップすることを忘れないでください。

  • まだ添付されていない画像が投稿コンテンツで使用されている可能性があります。ウィジェットで。

5
birgire