PluginProbe
Admin and Site Enhancements (ASE) / 9.0.2
Admin and Site Enhancements (ASE) v9.0.2
9.1.1 9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 All 273 releases
admin-site-enhancements / classes / class-disable-smaller-components.php
class-disable-smaller-components.php
291 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ASENHA\Classes;
4
5 /**
6 * Class for Disable Smaller Components module
7 *
8 * @since 6.9.5
9 */
10 class Disable_Smaller_Components {
11
12 /**
13 * Remove version number from URLs of static resources (CSS, JS)
14 *
15 * @since 5.8.0
16 */
17 public function remove_resource_version_number( $src ) {
18 if ( ! is_user_logged_in() ) {
19 // https://wordpress.org/support/topic/disable-smaller-components-version-can-be-hidden/
20 if ( strpos( $src, 'ver=' ) ) {
21 $src = remove_query_arg( 'ver', $src );
22 }
23 }
24 return $src;
25 }
26
27 /**
28 * Remove generator tag from RSS feed
29 *
30 * @since 7.3.3
31 */
32 public function remove_feed_generator_tag( $generator_type, $type ) {
33 // e.g. <generator>https://wordpress.org/?v=6.6.1</generator>
34 if ( false !== strpos( $generator_type, '<generator>https://wordpress.org/?v=' ) ) {
35 return '';
36 }
37 }
38
39 /**
40 * Disable loading of frontend public assets of dashicons
41 *
42 * @since 4.5.0
43 */
44 public function disable_dashicons_public_assets() {
45 global $pagenow;
46 if ( ! is_user_logged_in() ) {
47
48 // This will get /path/file.php?param=val portion of the full URL
49 $current_request_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] );
50
51 if ( empty( $current_request_uri ) ) {
52 // On the homepage
53 wp_dequeue_style( 'dashicons' );
54 wp_deregister_style( 'dashicons' );
55 } else {
56 // Exclude the login page, where dashicon assets are requred to properly style the page
57 if ( false !== strpos( $current_request_uri, 'wp-login.php' ) || 'wp-login.php' === $pagenow ) {
58 // On wp-login.php, so, do nothing
59 }
60 // Exclude password protection form
61 elseif ( false !== strpos( $current_request_uri, 'protected-page=view' ) ) {
62 // On protected-page=view, so, do nothing
63 }
64 else {
65 // NOT on wp-login.php, e.g. www.example.com/an-article/, so, dequeue dashicons
66 wp_dequeue_style( 'dashicons' );
67 wp_deregister_style( 'dashicons' );
68 }
69 }
70 }
71 }
72
73 /**
74 * Disable emoji support
75 *
76 * @since 4.5.0
77 */
78 public function disable_emoji_support() {
79
80 remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
81 remove_action( 'embed_head', 'print_emoji_detection_script' );
82 remove_action( 'wp_print_styles', 'print_emoji_styles' );
83 remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
84 remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
85 remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
86 add_action( 'admin_init', [ $this, 'disable_admin_emojis' ] );
87 add_filter( 'emoji_svg_url', '__return_false' );
88 add_filter( 'tiny_mce_plugins', [ $this, 'disable_emoji_for_tinymce' ] );
89 add_filter( 'wp_resource_hints', [ $this, 'disable_emoji_remove_dns_prefetch' ], 10, 2 );
90 add_filter( 'option_use_smilies', '__return_false' );
91
92 }
93
94 /**
95 * Disable jQuery Migrate
96 *
97 * @since 5.8.0
98 * @link https://plugins.trac.wordpress.org/browser/remove-jquery-migrate/trunk/remove-jquery-migrate.php
99 * @param WP_Scripts $scripts WP_Scripts object.
100 */
101 public function disable_jquery_migrate( $scripts ) {
102 if ( ! is_admin() && isset( $scripts->registered['jquery'] ) ) {
103 $script = $scripts->registered['jquery'];
104
105 if ( ! empty( $script->deps ) ) { // Check whether the script has any dependencies
106 $script->deps = array_diff( $script->deps, array( 'jquery-migrate' ) );
107 }
108 }
109 }
110
111 /**
112 * Remove the tinymce emoji plugin
113 *
114 * @since 4.5.0
115 */
116 public function disable_emoji_for_tinymce( $plugins ) {
117
118 if ( is_array( $plugins ) ) {
119 return array_diff( $plugins, array( 'wpemoji' ) );
120 }
121
122 return array();
123
124 }
125
126 /**
127 * Remove emoji CDN hostname from DNS prefetching hints.
128 *
129 * @since 4.5.0
130 */
131 public function disable_emoji_remove_dns_prefetch( $urls, $relation_type ) {
132
133 if ( 'dns-prefetch' == $relation_type ) {
134
135 // Strip out any URLs referencing the WordPress.org emoji location
136 $emoji_svg_url_base = 'https://s.w.org/images/core/emoji/';
137 foreach ( $urls as $key => $url ) {
138 if ( is_string( $url ) && false !== strpos( $url, $emoji_svg_url_base ) ) {
139 unset( $urls[$key] );
140 }
141 }
142
143 }
144
145 return $urls;
146
147 }
148
149 /**
150 * Disable emojis in wp-admin
151 *
152 * @since 4.7.2
153 */
154 public function disable_admin_emojis() {
155 remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
156 remove_action( 'admin_print_styles', 'print_emoji_styles' );
157 }
158
159 /**
160 * Add loading="eager" attribute for featured images
161 *
162 * @link https://plugins.trac.wordpress.org/browser/disable-lazy-loading/tags/2.1/disable-lazy-loading.php
163 * @since 7.3.0
164 */
165 public function eager_load_featured_images( $attr, $attachment = null ) {
166 $attr['loading'] = 'eager';
167 return $attr;
168 }
169
170 /**
171 * Whether ASE owns the current DISALLOW_FILE_EDIT=true write in wp-config.
172 *
173 * @since 7.4.5
174 * @return bool
175 */
176 private function get_disallow_file_edit_managed_by_ase() {
177 $options_extra = get_option( ASENHA_SLUG_U . '_extra', array() );
178
179 return ! empty( $options_extra['disallow_file_edit_managed_by_ase'] );
180 }
181
182 /**
183 * Persist whether ASE owns DISALLOW_FILE_EDIT in wp-config.
184 *
185 * @since 7.4.5
186 * @param bool $managed Whether ASE manages the constant.
187 */
188 private function set_disallow_file_edit_managed_by_ase( $managed ) {
189 $options_extra = get_option( ASENHA_SLUG_U . '_extra', array() );
190 $options_extra['disallow_file_edit_managed_by_ase'] = (bool) $managed;
191 update_option( ASENHA_SLUG_U . '_extra', $options_extra, true );
192 }
193
194 /**
195 * Disable plugin and theme editor.
196 *
197 * When DISALLOW_FILE_EDIT is already true in wp-config (external hardening),
198 * leave it alone and do not claim ownership. When absent or false, write true
199 * if wp-config is writable and mark ASE ownership.
200 *
201 * @since 7.4.5
202 */
203 public function disable_plugin_theme_editor() {
204 if ( wp_doing_ajax() || wp_doing_cron() ) {
205 return;
206 }
207
208 if ( ! current_user_can( 'manage_options' ) ) {
209 return;
210 }
211
212 $wp_config = new WP_Config_Transformer;
213 $wp_config_options = array(
214 'add' => true,
215 'raw' => true,
216 'normalize' => false,
217 );
218
219 if ( $wp_config->exists( 'constant', 'DISALLOW_FILE_EDIT' ) ) {
220 $value = $wp_config->get_value( 'constant', 'DISALLOW_FILE_EDIT' );
221
222 // External or already true: do not rewrite; do not claim ownership if flag unset.
223 if ( 'true' === $value ) {
224 return;
225 }
226 }
227
228 if ( $wp_config->wpconfig_file( 'writeability' ) ) {
229 try {
230 $updated = $wp_config->update( 'constant', 'DISALLOW_FILE_EDIT', 'true', $wp_config_options );
231 if ( $updated ) {
232 $this->set_disallow_file_edit_managed_by_ase( true );
233 }
234 } catch ( \Exception $e ) {
235 // Leave ownership unchanged if wp-config could not be updated.
236 }
237 }
238
239 if ( ! defined( 'DISALLOW_FILE_EDIT' ) ) {
240 define( 'DISALLOW_FILE_EDIT', true );
241 }
242 }
243
244 /**
245 * Re-enable plugin and theme editor when ASE owns DISALLOW_FILE_EDIT.
246 *
247 * Only writes false when ASE previously set the constant to true. Manual or
248 * third-party true values are never changed.
249 *
250 * @since 7.4.5
251 */
252 public function enable_plugin_theme_editor() {
253 if ( wp_doing_ajax() || wp_doing_cron() ) {
254 return;
255 }
256
257 if ( ! current_user_can( 'manage_options' ) ) {
258 return;
259 }
260
261 if ( ! $this->get_disallow_file_edit_managed_by_ase() ) {
262 return;
263 }
264
265 $wp_config = new WP_Config_Transformer;
266
267 if ( ! $wp_config->exists( 'constant', 'DISALLOW_FILE_EDIT' ) ) {
268 $this->set_disallow_file_edit_managed_by_ase( false );
269 return;
270 }
271
272 if ( ! $wp_config->wpconfig_file( 'writeability' ) ) {
273 return;
274 }
275
276 $wp_config_options = array(
277 'add' => false,
278 'raw' => true,
279 'normalize' => false,
280 );
281
282 try {
283 $updated = $wp_config->update( 'constant', 'DISALLOW_FILE_EDIT', 'false', $wp_config_options );
284 if ( $updated ) {
285 $this->set_disallow_file_edit_managed_by_ase( false );
286 }
287 } catch ( \Exception $e ) {
288 // Keep ownership flag so a later writable request can still reverse ASE's write.
289 }
290 }
291 }