{"id":23140,"date":"2023-12-19T04:34:34","date_gmt":"2023-12-18T19:34:34","guid":{"rendered":"http:\/\/hyunsik.me\/wordpress\/?p=23140"},"modified":"2023-12-29T05:46:14","modified_gmt":"2023-12-28T20:46:14","slug":"info-php-code-to-delete-unused-images-in-wordpress-%ec%9b%8c%eb%93%9c%ed%94%84%eb%a0%88%ec%8a%a4-%ec%82%ac%ec%9a%a9%ed%95%98%ec%a7%80-%ec%95%8a%eb%8a%94-%ec%9d%b4%eb%af%b8%ec%a7%80-%ec%82%ad","status":"publish","type":"post","link":"http:\/\/hyunsik.me\/wordpress\/?p=23140","title":{"rendered":"[Info] PHP Code\/Program  to Delete Unused Images in WordPress || \uc6cc\ub4dc\ud504\ub808\uc2a4 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0 \uc0ad\uc81c PHP \ucf54\ub4dc\/\ud504\ub85c\uadf8\ub7a8"},"content":{"rendered":"<p style=\"text-align: center;\"><img src=\"http:\/\/hyunsik.me\/wordpress\/wp-content\/uploads\/2023\/12\/20231220_023737.png\" alt=\"\" width=\"100%\" \/><\/p>\n<p>[English]<\/p>\n<p>\u2605 Assumes no responsibility for the use of this program\/code. \u2605<br \/>\nThis code\/program is designed to delete unused images in WordPress. Simply place the code inside a folder at the WordPress root directory. Used images are displayed in blue, unused in gray. Deletion can be done using checkboxes. It is strongly recommended to back up all images before proceeding.<br \/>\n\u203b Images in unpublished posts are treated as unused.<br \/>\n\u203b This approach involves removing all unused images, which is not the preferred method.<br \/>\n\u203b Depending on how you use WordPress, there can be various side effects. It is essential to back up the &#8216;uploads&#8217; folder before proceeding.<br \/>\n\u203b As this program\/code is easily exposed externally, it is recommended to change the file name when using it.<br \/>\n\u203b If you wish to use this code without PHP knowledge, please email pwc_h@naver.com.<br \/>\n\u203b This code was created by chatGPT. it&#8217;s fantastic<br \/>\n<a href=\"http:\/\/hyunsik.me\/wordpress\/wp-content\/uploads\/2023\/12\/duiw.zip\">Download PHP Code\/Program<\/a><\/p>\n<p>WordPress automatically saves one image in multiple sizes, resulting in inefficient use of storage space. While plugins can address this issue, many are paid and difficult to use. If you back up regularly, you can efficiently manage storage space with this program\/code. If it works well, be sure to leave a comment. This code was created 100% by ChatGPT, but it took a very long time for ChatGPT to figure out how to create this program\/code.<\/p>\n<p>[Korean]<\/p>\n<p>\u2605 \ubcf8 \ud504\ub85c\uadf8\ub7a8\/\ucf54\ub4dc\uc758 \uc0ac\uc6a9\uc5d0 \uc5b4\ub5a4 \ucc45\uc784\ub3c4 \uc9c0\uc9c0 \uc54a\ub294\ub2e4. \u2605<br \/>\n\uc6cc\ub4dc\ud504\ub808\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud558\ub294 \ucf54\ub4dc\/\ud504\ub85c\uadf8\ub7a8\uc774\ub2e4. wordpress \ucd5c\uc0c1\uc704 \ub808\ubca8\uc758 \ud3f4\ub354 \uc548\uc5d0 \ub123\uc73c\uba74 \ub418\uace0, \uc0ac\uc6a9\ub418\ub294 \uc774\ubbf8\uc9c0\ub294 \ud30c\ub780\uc0c9 \ud3f0\ud2b8\ub85c, \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0\ub294 \ud68c\uc0c9 \ud3f0\ud2b8\ub85c \ub098\ud0c0\ub09c\ub2e4. \uccb4\ud06c\ubc15\uc2a4\ub97c \uc774\uc6a9\ud558\uc5ec \uc0ad\uc81c\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uacc4\ud588\ub2e4. \ubc18\ub4dc\uc2dc \ubaa8\ub4e0 \uc774\ubbf8\uc9c0\ub97c \ubc31\uc5c5\ud55c \ub4a4\uc5d0 \uc0ac\uc6a9\ud560 \uac83\uc744 \uad8c\uc7a5\ud55c\ub2e4.<br \/>\n\u203b \uacf5\uac1c\ub41c \ud3ec\uc2a4\ud2b8\uac00 \uc544\ub2cc \ud3ec\uc2a4\ud2b8\uc5d0 \uc788\ub294 \uc774\ubbf8\uc9c0\ub294 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0\ub85c \uac04\uc8fc\ub41c\ub2e4.<br \/>\n\u203b \uac04\ud639, \ud55c\uae00\ub85c \ub41c \ud30c\uc77c\uba85\uc744 \uac00\uc9c4 \uc774\ubbf8\uc9c0 \ud30c\uc77c\uc740 \uc0ac\uc6a9 \uc720\ubb34\uc640 \uad00\uacc4\uc5c6\uc774 \uc81c\uac70\ub420 \ub54c\uac00 \uc788\ub2e4.(\ubaa8\ub450 \uadf8\ub7f0 \uac83\uc740 \uc544\ub2c8\ub2e4.)<br \/>\n\u203b \uc774 \ubc29\uc2dd\uc740 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ubaa8\ub4e0 \uc774\ubbf8\uc9c0\ub97c \uc81c\uac70\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c, \uc6cc\ub4dc\ud504\ub808\uc2a4\uac00 \uc88b\uc544\ud558\ub294 \ubc29\uc2dd\uc774 \uc544\ub2c8\ub2e4.<br \/>\n\u203b \uc678\ubd80\uc5d0 \uc27d\uac8c \ub178\ucd9c\ub418\ub294 \ubc29\uc2dd\uc758 \ud504\ub85c\uadf8\ub7a8\/\ucf54\ub4dc\uc774\ubbc0\ub85c \ub418\ub3c4\ub85d \ud30c\uc77c\uba85\uc744 \ubc14\uafd4\uc11c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud55c\ub2e4.<br \/>\n\u203b \ub2f9\uc2e0\uc774 \uc6cc\ub4dc\ud504\ub808\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc5d0 \ub530\ub77c\uc11c, \ub2e4\uc591\ud55c \ubd80\uc791\uc6a9\uc774 \uc788\uc744 \uc218 \uc788\ub2e4. \ubc18\ub4dc\uc2dc uploads \ud3f4\ub354\ub97c \ubc31\uc5c5\ud55c \ub4a4\uc5d0 \uc9c4\ud589\ud574\uc57c \ud55c\ub2e4.<br \/>\n\u203b PHP \uc9c0\uc2dd\uc774 \uc5c6\ub294 \uc0c1\ud669\uc5d0\uc11c, \ubcf8 \ucf54\ub4dc \uc0ac\uc6a9\uc744 \uc6d0\ud55c\ub2e4\uba74, pwc_h@naver.com \uc73c\ub85c \uba54\uc77c\uc744.<br \/>\n\u203b chatGPT\uac00 \ub9cc\ub4e0 \ucf54\ub4dc\uc774\ub2e4. \uc815\ub9d0 \ud658\uc0c1\uc801\uc774\ub2e4.<br \/>\n<a href=\"http:\/\/hyunsik.me\/wordpress\/wp-content\/uploads\/2023\/12\/duiw.zip\">\ub2e4\uc6b4\ub85c\ub4dc PHP \ucf54\ub4dc\/\ud504\ub85c\uadf8\ub7a8<\/a><\/p>\n<p>\uc6cc\ub4dc\ud504\ub808\uc2a4\ub294 \ud558\ub098\uc758 \uc774\ubbf8\uc9c0\ub97c \uc5ec\ub7ec \uc0ac\uc774\uc988\ub85c \uc790\ub3d9 \uc800\uc7a5\ud55c\ub2e4. \uc800\uc7a5 \uacf5\uac04\uc744 \ube44\ud6a8\uc728\uc801\uc73c\ub85c \uc0ac\uc6a9\ud55c\ub2e4. \ud50c\ub7ec\uadf8\uc778\uc744 \ud1b5\ud574 \ubcf4\uc644\ud560 \uc218 \uc788\uc9c0\ub9cc, \ub300\ubd80\ubd84 \uc720\ub8cc\uc774\uace0, \uc0ac\uc6a9 \ubc29\ubc95\uc774 \uc5b4\ub835\ub2e4. \ubc31\uc5c5\ub9cc \uc798 \ud55c\ub2e4\uba74 \ubcf8 \ud504\ub85c\uadf8\ub7a8\/\ucf54\ub4dc\ub97c \ud1b5\ud574 \uc800\uc7a5 \uacf5\uac04\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc798 \uc0ac\uc6a9\ud588\ub2e4\uba74, \ub313\uae00\uc740 \ubb34\uc870\uac74 \ub0a8\uaca8\uc918\uc57c \ud55c\ub2e4. \uc774 \ucf54\ub4dc\ub294 100% chatGPT\uac00 \ub9cc\ub4e4\uc5c8\uc9c0\ub9cc, chatGPT\uac00 \uc774 \ud504\ub85c\uadf8\ub7a8\/\ucf54\ub4dc\ub97c \ub9cc\ub4e4 \uc218 \uc788\uac8c \uaf2c\uc2dc\ub294 \uac83\uc5d0\ub294 \ub9e4\uc6b0 \uc624\ub79c \uc2dc\uac04\uc774 \uac78\ub838\ub2e4.<\/p>\n<p><iframe width=\"580\" height=\"300\" src=\"https:\/\/www.youtube.com\/embed\/43nSkORdx0o\" title=\"\uc6cc\ub4dc\ud504\ub808\uc2a4 (\uc124\uce58\ud615) \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0 \uc0ad\uc81c PHP \ud504\ub85c\uadf8\ub7a8\/\ucf54\ub4dc || PHP Code\/Program to Delete Unused Images in WordPress\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<p>[line][\/line]<\/p>\n<pre style=\"font-family: NanumGothic; background-color: #e3e3f3; padding: 5px; color: blue; font-size: 11pt;\">\r\n&lt;?php\r\n\/\/ Set the path for the uploads folder. (\uc5c5\ub85c\ub4dc \ud3f4\ub354\uc758 \uacbd\ub85c \uc124\uc815.)\r\nrequire_once('wp-load.php');\r\n\/\/ Number of images to display per page. (\ud55c \ud398\uc774\uc9c0\uc5d0 \ud45c\uc2dc\ud560 \uc774\ubbf8\uc9c0 \uac1c\uc218.)\r\n$uploads_dir = wp_upload_dir()['basedir'];\r\n$images_per_page = 1000;\r\n\/\/ Get the current page. (\ud604\uc7ac \ud398\uc774\uc9c0 \uac00\uc838\uc624\uae30.)\r\n$current_page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;\r\n\/\/ Get a list of all image files. (\ubaa8\ub4e0 \uc774\ubbf8\uc9c0 \ud30c\uc77c \ubaa9\ub85d \uac00\uc838\uc624\uae30.)\r\n$all_images = glob($uploads_dir . '\/*\/*\/*.{jpg,jpeg,png,gif}', GLOB_BRACE);\r\n\/\/ Get all posts. (\ubaa8\ub4e0 \ud3ec\uc2a4\ud2b8 \uac00\uc838\uc624\uae30.)\r\n$args = array(\r\n\u00a0 \u00a0 'post_type' =&gt; array('post', 'page'), \/\/ Search for both posts and pages. (\ud3ec\uc2a4\ud2b8\uc640 \ud398\uc774\uc9c0 \ubaa8\ub450 \uac80\uc0c9.)\r\n\u00a0 \u00a0 'posts_per_page' =&gt; -1,\r\n);\r\n$posts = get_posts($args);\r\n\/\/ Get all pages. (\ubaa8\ub4e0 \ud398\uc774\uc9c0 \uac00\uc838\uc624\uae30.)\r\n$pages = get_pages(array('sort_column' =&gt; 'post_date', 'sort_order' =&gt; 'desc'));\r\n\/\/ Combine posts and pages. (\ud3ec\uc2a4\ud2b8\uc640 \ud398\uc774\uc9c0 \uacb0\ud569.)\r\n$all_posts = array_merge($posts, $pages);\r\n\/\/ Crop the list of visible images based on the current page. (\ud604\uc7ac \ud398\uc774\uc9c0\uc5d0 \ub9de\uac8c \uc774\ubbf8\uc9c0 \ub9ac\uc2a4\ud2b8 \uc790\ub974\uae30.)\r\n$start_index = ($current_page - 1) * $images_per_page;\r\n$visible_images = array_slice($all_images, $start_index, $images_per_page);\r\n\/\/ Image deletion handling. (\uc774\ubbf8\uc9c0 \uc0ad\uc81c \ucc98\ub9ac.)\r\nif (isset($_POST['delete_images'])) {\r\n\u00a0 \u00a0 $selected_images = $_POST['delete_images'];\r\n\u00a0 \u00a0 foreach ($selected_images as $selected_image) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Delete the image file. (\uc774\ubbf8\uc9c0 \ud30c\uc77c \uc0ad\uc81c.)\r\n\u00a0 \u00a0 \u00a0 \u00a0 unlink($uploads_dir . $selected_image);\r\n\u00a0 \u00a0 }\r\n\u00a0 \u00a0 \/\/ Reload the page. (\ud398\uc774\uc9c0 \ub9ac\ub85c\ub4dc.)\r\n\u00a0 \u00a0 echo '&lt;meta http-equiv=\"refresh\" content=\"0\"\/&gt;';\r\n}\r\n\/\/ Output: Image list (\ucd9c\ub825: \uc774\ubbf8\uc9c0 \ubaa9\ub85d)\r\necho '&lt;h1&gt;Image List (\uc774\ubbf8\uc9c0 \ubaa9\ub85d)&lt;\/h1&gt;';\r\necho '&lt;form method=\"post\"&gt;';\r\necho '&lt;ul&gt;';\r\nforeach ($visible_images as $image) {\r\n\u00a0 \u00a0 \/\/ Extract the relative path of the image file. (\uc774\ubbf8\uc9c0 \ud30c\uc77c\uc758 \uc0c1\ub300 \uacbd\ub85c \ucd94\ucd9c.)\r\n\u00a0 \u00a0 $relative_path = str_replace($uploads_dir, '', $image);\r\n\u00a0 \u00a0 \/\/ Extract only the image file name. (\uc774\ubbf8\uc9c0 \ud30c\uc77c\uba85\ub9cc \ucd94\ucd9c.)\r\n\u00a0 \u00a0 $image_name = pathinfo($image, PATHINFO_BASENAME);\r\n\u00a0 \u00a0 \/\/ Check if the image file has been used in any post or page. \r\n    \/\/ (\ud574\ub2f9 \uc774\ubbf8\uc9c0 \ud30c\uc77c\uc774 \ud3ec\uc2a4\ud2b8 \ub610\ub294 \ud398\uc774\uc9c0\uc5d0\uc11c \uc0ac\uc6a9\ub418\uc5c8\ub294\uc9c0 \ud655\uc778.)\r\n\u00a0 \u00a0 $is_used = false;\r\n\u00a0 \u00a0 foreach ($all_posts as $post) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Get post content. (\ud3ec\uc2a4\ud2b8 \ub0b4\uc6a9 \uac00\uc838\uc624\uae30.)\r\n\u00a0 \u00a0 \u00a0 \u00a0 $content = $post-&gt;post_content;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Check if the image file name exists in the post content. \r\n        \/\/ (\uc774\ubbf8\uc9c0 \ud30c\uc77c\uba85\uc774 \ud3ec\uc2a4\ud2b8 \ub0b4\uc6a9\uc5d0 \uc874\uc7ac\ud558\ub294\uc9c0 \ud655\uc778.)\r\n\u00a0 \u00a0 \u00a0 \u00a0 if (strpos($content, $image_name) !== false) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $is_used = true;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break;\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 }\r\n\u00a0 \u00a0 \/\/ Output and specify color. (\ucd9c\ub825 \ubc0f \uceec\ub7ec \uc9c0\uc815.)\r\n\u00a0 \u00a0 $color = $is_used ? 'blue' : 'black';\r\n\u00a0 \u00a0 \/\/ Set default checkbox state to checked only for images that are not in use. \r\n    \/\/ (\uc774\ubbf8\uc9c0\uac00 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub9cc \uccb4\ud06c\ubc15\uc2a4 \uae30\ubcf8 \uccb4\ud06c \uc0c1\ud0dc\ub85c \uc124\uc815.)\r\n\u00a0 \u00a0 $checked = !$is_used ? 'checked' : '';\r\n\u00a0 \u00a0 echo '&lt;li style=\"color: ' . $color . ';\"&gt;' . $image_name . ' - ' . $relative_path . ' ';\r\n\u00a0 \u00a0 echo '&lt;input type=\"checkbox\" name=\"delete_images[]\" value=\"' . $relative_path . '\" ' . $checked . '\/&gt;&lt;\/li&gt;';\r\n}\r\necho '&lt;\/ul&gt;';\r\n\/\/ Output delete button and pagination bar. (\uc0ad\uc81c \ubc84\ud2bc \ubc0f \ud398\uc774\uc9d5\ubc14 \ucd9c\ub825.)\r\necho '&lt;input type=\"submit\" value=\"Delete Selected Images(\uc120\ud0dd\ud55c \uc774\ubbf8\uc9c0 \uc0ad\uc81c)\"\/&gt;';\r\necho '&lt;\/form&gt;';\r\necho '&lt;div class=\"pagination\"&gt;';\r\nfor ($i = 1; $i &lt;= ceil(count($all_images) \/ $images_per_page); $i++) {\r\n\u00a0 \u00a0 echo '&lt;a href=\"?page=' . $i . '\"&gt;' . $i . '&lt;\/a&gt;';\r\n}\r\necho '&lt;\/div&gt;';\r\n?&gt;\r\n<\/pre>\n<p>[line][\/line]<\/p>\n<p>[English]<br \/>\nAlthough the specifics may elude me, it seems ChatGPT has ushered in a new era. Quite remarkable.<\/p>\n<p>[Korean]<br \/>\n\uc815\ud655\ud788 \uc5bc\ub9cc\ud07c\uc778\uc9c0 \uc5b4\ub514\uc778\uc9c0\ub294 \ubab0\ub77c\ub3c4, chatGPT\uac00 \uc0c8\ub85c\uc6b4 \uc138\uc0c1\uc744 \uc5f0 \uac83\uc740 \ub9de\ub294 \uac83 \uac19\ub2e4. \ub300\ub2e8\ud558\ub2e4.<\/p>\n<p><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-6429403062584421\" crossorigin=\"anonymous\"><\/script><br \/>\n<ins class=\"adsbygoogle\" style=\"display: block; text-align: center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-6429403062584421\" data-ad-slot=\"9549587772\"><\/ins><br \/>\n<script>\n\t\t (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/p>\n<p style=\"text-align: center;\"><img style=\"border: 1px solid grey;\" src=\"http:\/\/hyunsik.me\/wordpress\/wp-content\/uploads\/2023\/12\/20231219_060257.png\" alt=\"\" width=\"721\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[English] \u2605 Assumes no responsibility for the use of this program\/code. \u2605 This code\/program is designed to delete unused images in WordPress. Simply place the code inside a folder at the WordPress root directory. Used images are displayed in blue, unused in gray. Deletion can be done using checkboxes. It is strongly recommended to back [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[2290],"tags":[3413,3280,3641,3653,3648,3649,3651,3650,38,3647,4,3644,3646,3645,3,39,3417,3652,119],"jetpack_featured_media_url":"","views":"","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/23140"}],"collection":[{"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23140"}],"version-history":[{"count":48,"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/23140\/revisions"}],"predecessor-version":[{"id":23254,"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/23140\/revisions\/23254"}],"wp:attachment":[{"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23140"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/hyunsik.me\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}