PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 3.9.1
Admin and Site Enhancements (ASE) v3.9.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 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-disable-components.php
admin-site-enhancements / classes Last commit date
class-activation.php 3 years ago class-admin-interface.php 3 years ago class-common-methods.php 3 years ago class-content-management.php 3 years ago class-custom-code.php 3 years ago class-deactivation.php 3 years ago class-disable-components.php 3 years ago class-login-logout.php 3 years ago class-optimizations.php 3 years ago class-security.php 3 years ago class-settings-fields-render.php 3 years ago class-settings-sanitization.php 3 years ago class-settings-sections-fields.php 3 years ago class-utilities.php 3 years ago
class-disable-components.php
264 lines
1 <?php
2
3 namespace ASENHA\Classes;
4 use WP_Error;
5
6 /**
7 * Class related to the Disable Components feature
8 *
9 * @since 2.2.0
10 */
11 class Disable_Components {
12
13 /**
14 * Disable comments for post types
15 *
16 * @since 2.7.0
17 */
18 public function disable_comments_for_post_types_edit() {
19
20 $options = get_option( ASENHA_SLUG_U );
21 $disable_comments_for = $options['disable_comments_for'];
22
23 foreach ( $disable_comments_for as $post_type_slug => $is_commenting_disabled ) {
24 if ( $is_commenting_disabled ) {
25 remove_post_type_support( $post_type_slug, 'comments' );
26 remove_post_type_support( $post_type_slug, 'trackbacks' );
27 remove_meta_box( 'commentstatusdiv', $post_type_slug, 'normal' );
28 remove_meta_box( 'commentstatusdiv', $post_type_slug, 'side' );
29 remove_meta_box( 'commentsdiv', $post_type_slug, 'normal' );
30 remove_meta_box( 'commentsdiv', $post_type_slug, 'side' );
31 remove_meta_box( 'trackbacksdiv', $post_type_slug, 'normal' );
32 remove_meta_box( 'trackbacksdiv', $post_type_slug, 'side' );
33 }
34 }
35
36 }
37
38 /**
39 * Hide existing comments from the frontend post
40 *
41 * @since 2.7.0
42 */
43 public function hide_existing_comments_on_frontend( $comments, $post_id ) {
44 $options = get_option( ASENHA_SLUG_U );
45 $disable_comments_for = $options['disable_comments_for'];
46 $current_post_type = get_post_type();
47
48 foreach ( $disable_comments_for as $post_type_slug => $is_commenting_disabled ) {
49 if ( ( $current_post_type === $post_type_slug ) && $is_commenting_disabled ) {
50 return array(); // return an empty array instead of the existing comments array
51 } else {
52 return $comments;
53 }
54 }
55 }
56
57 /**
58 * Close commenting on the frontend
59 *
60 * @since 2.7.0
61 */
62 public function close_commenting_on_frontend() {
63 $options = get_option( ASENHA_SLUG_U );
64 $disable_comments_for = $options['disable_comments_for'];
65 $current_post_type = get_post_type();
66
67 foreach ( $disable_comments_for as $post_type_slug => $is_commenting_disabled ) {
68 if ( ( $current_post_type === $post_type_slug ) && $is_commenting_disabled ) {
69 return false; // close commenting
70 } else {
71 return true; // keep commenting open
72 }
73 }
74 }
75
76 /**
77 * Disable Gutenberg in wp-admin for some or all post types
78 *
79 * @since 2.8.0
80 */
81 public function disable_gutenberg_for_post_types_admin() {
82
83 // Get current page's post type from WP core globals and query parameters
84
85 global $pagenow, $typenow;
86
87 $post_type = null;
88
89 if ( 'edit.php' === $pagenow ) { // on the list table screen, $typenow returns correct post type
90
91 $post_type = $typenow;
92
93 } elseif ( 'post.php' === $pagenow ) { // on the edit screen, $typenow is empty, so we detect it
94
95 $post_type = get_post_type( $_GET['post'] );
96
97 } elseif ( 'post-new.php' === $pagenow ) { // on the add new screen, best to get post type from GET parameter
98
99 $post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : 'post';
100
101 } else {}
102
103 // Check if Gutenberg feature is enabled for the site
104
105 // Before/after WP v5.0.0 via feature plugin
106 $gutenberg = function_exists( 'gutenberg_register_scripts_and_styles' );
107
108 // Since WP v5.0.0, gutenberg is in core
109 $block_editor = has_action( 'enqueue_block_assets' );
110
111 // Gutenberg feature is not enabled for the site
112 if ( ! $gutenberg && ( false === $block_editor ) ) {
113 return; // do nothing
114 }
115
116 // Assemble single-dimensional array of post types for which Gutenberg should be disabled
117 $options = get_option( ASENHA_SLUG_U );
118 $disable_gutenberg_for = $options['disable_gutenberg_for'];
119 $post_types_for_disable_gutenberg = array();
120
121 foreach( $disable_gutenberg_for as $post_type_slug => $is_gutenberg_disabled ) {
122 if ( $is_gutenberg_disabled ) {
123 $post_types_for_disable_gutenberg[] = $post_type_slug;
124 }
125 }
126
127 // Selectively disable Gutenberg
128 if ( in_array( $post_type, $post_types_for_disable_gutenberg ) ) {
129
130 // For WP v5.0.0 upwards
131 add_filter( 'use_block_editor_for_post_type', '__return_false', 100 );
132
133 // If Gutenberg feature plugin is activated
134 if ( $gutenberg ) {
135 add_filter( 'gutenberg_can_edit_post_type', '__return_false', 100 );
136 $this->remove_all_gutenberg_hook();
137 }
138
139 }
140
141 }
142
143 /**
144 * Remove Gutenberg hooks added via feature plugin.
145 *
146 * @link https://plugins.trac.wordpress.org/browser/classic-editor/tags/1.6.2/classic-editor.php#L138
147 * @since 2.8.0
148 */
149 public function remove_all_gutenberg_hooks() {
150
151 remove_action( 'admin_menu', 'gutenberg_menu' );
152 remove_action( 'admin_init', 'gutenberg_redirect_demo' );
153
154 // Gutenberg 5.3+
155 remove_action( 'wp_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
156 remove_action( 'admin_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
157 remove_action( 'admin_notices', 'gutenberg_wordpress_version_notice' );
158 remove_action( 'rest_api_init', 'gutenberg_register_rest_widget_updater_routes' );
159 remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
160 remove_action( 'admin_print_scripts', 'gutenberg_block_editor_admin_print_scripts' );
161 remove_action( 'admin_print_footer_scripts', 'gutenberg_block_editor_admin_print_footer_scripts' );
162 remove_action( 'admin_footer', 'gutenberg_block_editor_admin_footer' );
163 remove_action( 'admin_enqueue_scripts', 'gutenberg_widgets_init' );
164 remove_action( 'admin_notices', 'gutenberg_build_files_notice' );
165
166 remove_filter( 'load_script_translation_file', 'gutenberg_override_translation_file' );
167 remove_filter( 'block_editor_settings', 'gutenberg_extend_block_editor_styles' );
168 remove_filter( 'default_content', 'gutenberg_default_demo_content' );
169 remove_filter( 'default_title', 'gutenberg_default_demo_title' );
170 remove_filter( 'block_editor_settings', 'gutenberg_legacy_widget_settings' );
171 remove_filter( 'rest_request_after_callbacks', 'gutenberg_filter_oembed_result' );
172
173 // Previously used, compat for older Gutenberg versions.
174 remove_filter( 'wp_refresh_nonces', 'gutenberg_add_rest_nonce_to_heartbeat_response_headers' );
175 remove_filter( 'get_edit_post_link', 'gutenberg_revisions_link_to_editor' );
176 remove_filter( 'wp_prepare_revision_for_js', 'gutenberg_revisions_restore' );
177
178 remove_action( 'rest_api_init', 'gutenberg_register_rest_routes' );
179 remove_action( 'rest_api_init', 'gutenberg_add_taxonomy_visibility_field' );
180 remove_filter( 'registered_post_type', 'gutenberg_register_post_prepare_functions' );
181
182 remove_action( 'do_meta_boxes', 'gutenberg_meta_box_save' );
183 remove_action( 'submitpost_box', 'gutenberg_intercept_meta_box_render' );
184 remove_action( 'submitpage_box', 'gutenberg_intercept_meta_box_render' );
185 remove_action( 'edit_page_form', 'gutenberg_intercept_meta_box_render' );
186 remove_action( 'edit_form_advanced', 'gutenberg_intercept_meta_box_render' );
187 remove_filter( 'redirect_post_location', 'gutenberg_meta_box_save_redirect' );
188 remove_filter( 'filter_gutenberg_meta_boxes', 'gutenberg_filter_meta_boxes' );
189
190 remove_filter( 'body_class', 'gutenberg_add_responsive_body_class' );
191 remove_filter( 'admin_url', 'gutenberg_modify_add_new_button_url' ); // old
192 remove_action( 'admin_enqueue_scripts', 'gutenberg_check_if_classic_needs_warning_about_blocks' );
193 remove_filter( 'register_post_type_args', 'gutenberg_filter_post_type_labels' );
194 }
195
196 /**
197 * Disable Gutenberg styles and scripts on the front end for all or some post types
198 *
199 * @since 2.8.0
200 */
201 public function disable_gutenberg_for_post_types_frontend() {
202
203 $post = get_queried_object();
204 $post_type = $post->post_type;
205
206 // Assemble single-dimensional array of post types for which Gutenberg should be disabled
207 $options = get_option( ASENHA_SLUG_U );
208 $disable_gutenberg_for = $options['disable_gutenberg_for'];
209 $post_types_for_disable_gutenberg = array();
210
211 foreach( $disable_gutenberg_for as $post_type_slug => $is_gutenberg_disabled ) {
212 if ( $is_gutenberg_disabled ) {
213 $post_types_for_disable_gutenberg[] = $post_type_slug;
214 }
215 }
216
217 // Selectively disable for the selected post types
218 if ( in_array( $post_type, $post_types_for_disable_gutenberg ) ) {
219
220 global $wp_styles;
221
222 // As needed, exclude some block styles from dequeuing
223 $keep_enqueued = array(); // e.g. array( 'wp-block-navigation' );
224
225 foreach ( $wp_styles->queue as $handle ) {
226
227 // For all stye handles that starts with 'wp-block'
228 if ( false !== strpos( $handle, 'wp-block' ) ) {
229
230 if ( ! in_array( $handle, $keep_enqueued ) ) {
231 wp_dequeue_style( $handle );
232 }
233
234 }
235
236 }
237
238 // Additional dequeuing
239 wp_dequeue_style( 'core-block-supports' );
240 wp_dequeue_style( 'global-styles' ); // theme.json
241 wp_dequeue_style( 'classic-theme-styles' ); // classic theme
242
243 }
244
245 }
246
247 /**
248 * Disable REST API for non-authenticated users. This is for WP v4.7 or later.
249 *
250 * @since 2.9.0
251 */
252 public function disable_rest_api() {
253
254 return new WP_Error(
255 'rest_api_authentication_required',
256 'The REST API has been restricted to authenticated users.',
257 array(
258 'status' => rest_authorization_required_code()
259 )
260 );
261
262 }
263
264 }