{"id":19025929,"date":"2026-09-22T06:55:19","date_gmt":"2026-09-22T06:55:19","guid":{"rendered":"https:\/\/wordpress.org\/support\/topic\/bug-admin-folders-js-breaks-select-all-on-wp-admin-update-core-php\/"},"modified":"2026-09-22T06:59:34","modified_gmt":"2026-09-22T06:59:34","slug":"bug-admin-folders-js-breaks-select-all-on-wp-admin-update-core-php","status":"publish","type":"topic","link":"https:\/\/wordpress.org\/support\/topic\/bug-admin-folders-js-breaks-select-all-on-wp-admin-update-core-php\/","title":{"rendered":"Bug: admin-folders.js breaks \u201cSelect All\u201d on wp-admin\/update-core.php"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hi,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I found a JavaScript conflict caused by Responsive Lightbox on the WordPress Updates screen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/wp-admin\/update-core.php<br \/><br \/>the \u201cSelect All\u201d checkbox for plugin updates no longer selects the individual plugin checkboxes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The individual plugin checkboxes themselves work correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I was able to isolate the issue to Responsive Lightbox. As soon as the plugin is deactivated, the WordPress \u201cSelect All\u201d functionality works again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Environment<\/strong><\/p>\n\n\n\n<ul>\n<li>WordPress: 7.1.1<\/li>\n\n\n\n<li>Responsive Lightbox: 2.7.9<\/li>\n\n\n\n<li>Browser: Firefox<\/li>\n\n\n\n<li>Affected screen: <code>wp-admin\/update-core.php<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What I found<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Responsive Lightbox loads the following admin scripts on the Updates screen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/wp-content\/plugins\/responsive-lightbox\/assets\/select2\/select2.full.min.js<br \/>\/wp-content\/plugins\/responsive-lightbox\/js\/admin-folders.js<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problematic behavior appears to come from <code>admin-folders.js<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The script contains several checks such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>if (\"upload.php\" !== rlFoldersArgs.page) {<br \/>return;<br \/>}<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">However, these checks only protect individual functions or smaller code blocks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The main initialization continues to execute on unrelated admin screens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, when <code>rlFoldersArgs.page<\/code> is not <code>upload.php<\/code>, the script still falls back to list mode:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>o = e(\"body\").hasClass(\"rl-folders-upload-grid-mode\") ? \"grid\" : \"list\";<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and later calls:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>j(\"list\");<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">which initializes jQuery UI draggable behavior on:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#the-list tr<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The script also registers several global handlers on <code>document<\/code>, including <code>click<\/code>, <code>change<\/code>, <code>keydown<\/code>, and <code>ajaxComplete<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This means the media folder functionality is partially initialized on <code>update-core.php<\/code>, even though that screen is unrelated to the media library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Result<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the WordPress Updates screen:<\/p>\n\n\n\n<ul>\n<li><code>#plugins-select-all<\/code> receives <code>click<\/code> and <code>change<\/code> events correctly<\/li>\n\n\n\n<li>individual plugin checkboxes work correctly<\/li>\n\n\n\n<li>manually setting the individual checkboxes via JavaScript works<\/li>\n\n\n\n<li>but the normal WordPress \u201cSelect All\u201d behavior no longer works<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example manual test:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const checked = document.getElementById('plugins-select-all').checked;<br \/><br \/>document<br \/>\t.querySelectorAll('#update-plugins-table input&#091;name=\"checked&#091;]\"]')<br \/>\t.forEach(el =&gt; {<br \/>\t\tel.checked = checked;<br \/>\t});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This correctly selects all plugin checkboxes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected behavior<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>admin-folders.js<\/code> should only initialize its media folder functionality on the admin screens where it is actually required, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (<br \/>\trlFoldersArgs.page !== 'upload.php' &amp;&amp;<br \/>\trlFoldersArgs.page !== 'media' &amp;&amp;<br \/>\trlFoldersArgs.page !== 'media-new.php'<br \/>) {<br \/>\treturn;<br \/>}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or by conditionally enqueueing the script only on the relevant media screens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Actual behavior<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>admin-folders.js<\/code> is loaded and partially initialized on <code>update-core.php<\/code>, which causes a conflict with WordPress core admin behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Could you please restrict the script initialization or enqueueing to the relevant media screens?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks!<\/p>\n","protected":false},"template":"","class_list":["post-19025929","topic","type-topic","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/19025929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic"}],"about":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":1,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/19025929\/revisions"}],"predecessor-version":[{"id":19025930,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/19025929\/revisions\/19025930"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/media?parent=19025929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}