PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.18.0
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.18.0
1.19.8 1.19.7 1.19.6 1.19.5 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.12.0 1.13.0 1.14.0 1.15.0 1.15.1 1.15.2 1.15.3 1.16.0 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.16.8 1.17.0 1.17.6 1.17.7 1.17.8 1.17.9 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.18.8 1.18.9 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.3.19 1.3.20 1.4.0 1.4.1 1.5.0 1.5.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.16 1.5.17 1.5.18 1.5.19 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.8.0 1.8.1 1.8.3 1.9.0 1.9.1 1.9.2
nitropack / main.php
nitropack Last commit date
classes 1 year ago languages 1 year ago nitropack-sdk 1 year ago view 1 year ago advanced-cache.php 2 years ago batcache-compat.php 4 years ago constants.php 1 year ago diagnostics.php 2 years ago functions.php 1 year ago helpers.php 3 years ago main.php 1 year ago readme.txt 1 year ago uninstall.php 1 year ago
main.php
274 lines
1 <?php
2 /*
3 Plugin Name: NitroPack
4 Plugin URI: https://nitropack.io/platform/wordpress
5 Description: Automatic optimization for site speed and Core Web Vitals. Use 35+ features, including Caching, image optimization, critical CSS, and Cloudflare CDN.
6 Version: 1.18.0
7 Author: NitroPack Inc.
8 Author URI: https://nitropack.io/
9 License: GPL2
10 License URI: https://www.gnu.org/licenses/gpl-2.0.html
11 Text Domain: nitropack
12 Domain Path: /languages
13 */
14
15 defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
16
17 if ( ! defined( 'NITROPACK_BASENAME' ) ) {
18 define( 'NITROPACK_BASENAME', plugin_basename( __FILE__ ) );
19 }
20
21 $np_basePath = dirname( __FILE__ ) . '/';
22 require_once $np_basePath . 'functions.php';
23 require_once $np_basePath . 'helpers.php';
24 require_once $np_basePath . 'diagnostics.php';
25
26 if ( nitropack_is_wp_cli() ) {
27 $nitropack_cli = new \NitroPack\CLI();
28 $nitropack_cli->init();
29 }
30
31 if ( \NitroPack\Integration\Plugin\Ezoic::isActive() ) {
32 if ( ! nitropack_is_optimizer_request() ) {
33 // We need to serve the cached content after Ezoic's output buffering has started at plugins_loaded,0
34 add_action( 'plugins_loaded', function () {
35 add_filter( 'home_url', [ '\NitroPack\Integration\Plugin\Ezoic', 'getHomeUrl' ] );
36 nitropack_handle_request( "plugin-ezoic" );
37 remove_filter( 'home_url', [ '\NitroPack\Integration\Plugin\Ezoic', 'getHomeUrl' ] );
38 }, 1 );
39 } else {
40 add_action( 'plugins_loaded', [ '\NitroPack\Integration\Plugin\Ezoic', 'disable' ], 1 );
41 }
42 } else {
43 nitropack_handle_request( "plugin" );
44 }
45
46 add_filter( 'nitro_script_output', function ($script) {
47 $isPrefetch = isset( $_SERVER['HTTP_SEC_FETCH_DEST'] )
48 && $_SERVER['HTTP_SEC_FETCH_DEST'] === 'empty'
49 && (
50 ( isset( $_SERVER['HTTP_SEC_PURPOSE'] ) && $_SERVER['HTTP_SEC_PURPOSE'] === 'prefetch' )
51 ||
52 ( isset( $_SERVER['HTTP_PURPOSE'] ) && $_SERVER['HTTP_PURPOSE'] === 'prefetch' )
53 );
54
55 $canPrintScripts = ! nitropack_is_amp_page() // Make sure we don't accidentally print a non-amp compatible script to an amp page
56 && ( ! isset( $_SERVER['HTTP_SEC_FETCH_DEST'] ) || $_SERVER['HTTP_SEC_FETCH_DEST'] === 'document' || $isPrefetch )
57 && ( ! isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) || strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) !== 'xmlhttprequest' );
58
59 if ( $canPrintScripts ) {
60 return $script;
61 } else {
62 return "";
63 }
64 } );
65 add_action( 'pre_post_update', 'nitropack_log_post_pre_update', 10, 3 );
66 add_filter( 'woocommerce_rest_pre_insert_product_object', 'nitropack_log_product_pre_api_update', 10, 3 );
67 add_action( 'set_object_terms', 'nitropack_sot', 10, 6 );
68 add_action( 'transition_post_status', 'nitropack_handle_post_transition', 10, 3 );
69 //add_action('publish_post', 'nitropack_handle_first_publish', 10, 1);
70 add_action( 'transition_comment_status', 'nitropack_handle_comment_transition', 10, 3 );
71 add_action( 'comment_post', 'nitropack_handle_comment_post', 10, 2 );
72 add_action( 'woocommerce_reduce_order_stock', 'custom_reduce_stock_after_order_placed' );
73 add_action( 'switch_theme', 'nitropack_theme_handler' );
74 register_shutdown_function( 'nitropack_execute_purges' );
75 register_shutdown_function( 'nitropack_execute_invalidations' );
76 register_shutdown_function( 'nitropack_execute_warmups' );
77
78 add_action( 'woocommerce_product_object_updated_props', 'nitropack_handle_product_updates', 0, 2 );
79 add_action( 'woocommerce_rest_insert_product', function ($post, $request, $creating) {
80 if ( ! $creating ) {
81 nitropack_detect_changes_and_clean_post_cache( $post );
82 }
83 }, 10, 3 );
84 add_action( 'woocommerce_rest_insert_product_object', function ($product, $request, $creating) {
85 if ( ! $creating ) {
86
87 $post = get_post( $product->get_id() );
88 if ( ! defined( 'NITROPACK_PURGE_CACHE' ) ) {
89 nitropack_detect_changes_and_clean_post_cache( $post );
90 }
91 }
92 }, 10, 3 );
93
94 if ( nitropack_has_advanced_cache() ) {
95 // Handle automated updates
96 if ( ! defined( "NITROPACK_ADVANCED_CACHE_VERSION" ) || NITROPACK_VERSION != NITROPACK_ADVANCED_CACHE_VERSION ) {
97 add_action( 'plugins_loaded', 'nitropack_install_advanced_cache' );
98 }
99 }
100
101 add_action( 'wp_footer', 'nitropack_print_heartbeat_script' );
102 add_action( 'admin_footer', 'nitropack_print_heartbeat_script' );
103 add_action( 'get_footer', 'nitropack_print_heartbeat_script' );
104
105 add_action( 'wp_footer', 'nitropack_print_cookie_handler_script' );
106 add_action( 'admin_footer', 'nitropack_print_cookie_handler_script' );
107 add_action( 'admin_footer', function () {
108 nitropack_setcookie( "nitroCachedPage", 0, time() - 86400 );
109 } ); // Clear the nitroCachePage cookie
110 add_action( 'get_footer', 'nitropack_print_cookie_handler_script' );
111
112 if (is_admin()) {
113 add_action('admin_menu', 'nitropack_menu');
114 add_action('admin_init', 'register_nitropack_settings');
115
116 add_action('wp_ajax_nitropack_purge_cache', 'nitropack_purge_cache');
117 add_action('wp_ajax_nitropack_invalidate_cache', 'nitropack_invalidate_cache');
118 add_action('wp_ajax_nitropack_clear_residual_cache', 'nitropack_clear_residual_cache');
119 add_action('wp_ajax_nitropack_verify_connect', 'nitropack_verify_connect_ajax');
120 add_action('wp_ajax_nitropack_disconnect', 'nitropack_disconnect');
121 add_action('wp_ajax_nitropack_set_optimization_mode', 'nitropack_set_optimization_mode');
122 add_action('wp_ajax_nitropack_test_compression_ajax', 'nitropack_test_compression_ajax');
123 add_action('wp_ajax_nitropack_set_compression_ajax', 'nitropack_set_compression_ajax');
124 add_action('wp_ajax_nitropack_set_can_editor_clear_cache', 'nitropack_set_can_editor_clear_cache');
125 add_action('wp_ajax_nitropack_set_stock_reduce_status', 'nitropack_set_stock_reduce_status');
126 add_action('wp_ajax_nitropack_set_auto_cache_purge_ajax', 'nitropack_set_auto_cache_purge_ajax');
127 add_action('wp_ajax_nitropack_set_cart_cache_ajax', 'nitropack_set_cart_cache_ajax');
128 add_action('wp_ajax_nitropack_set_bb_cache_purge_sync_ajax', 'nitropack_set_bb_cache_purge_sync_ajax');
129 add_action('wp_ajax_nitropack_set_cacheable_post_types', 'nitropack_set_cacheable_post_types');
130 add_action('wp_ajax_nitropack_enable_warmup', 'nitropack_enable_warmup');
131 add_action('wp_ajax_nitropack_disable_warmup', 'nitropack_disable_warmup');
132 add_action('wp_ajax_nitropack_warmup_stats', 'nitropack_warmup_stats');
133 add_action('wp_ajax_nitropack_estimate_warmup', 'nitropack_estimate_warmup');
134 add_action('wp_ajax_nitropack_run_warmup', 'nitropack_run_warmup');
135 add_action('wp_ajax_nitropack_purge_single_cache', 'nitropack_purge_single_cache');
136 add_action('wp_ajax_nitropack_invalidate_single_cache', 'nitropack_invalidate_single_cache');
137 add_action('wp_ajax_nitropack_purge_entire_cache', 'nitropack_purge_entire_cache');
138 add_action('wp_ajax_nitropack_dismiss_hosting_notice', 'nitropack_dismiss_hosting_notice');
139
140 add_action('wp_ajax_nitropack_reconfigure_webhooks', 'nitropack_reconfigure_webhooks');
141 add_action('wp_ajax_nitropack_generate_report', 'nitropack_generate_report'); //diag_ajax_hook
142
143 add_action('admin_init', 'nitropack_autooptimize_new_post_types_and_taxonomies');
144 add_action('activated_plugin', 'nitropack_upgrade_handler');
145 add_action('deactivated_plugin', 'nitropack_upgrade_handler');
146 add_action('upgrader_process_complete', 'nitropack_upgrade_handler');
147 add_action('update_option_nitropack-enableCompression', 'nitropack_handle_compression_toggle', 10, 2);
148 add_action('add_meta_boxes', 'nitropack_add_meta_box');
149
150 add_filter('get_nitropack_notifications', 'nitropack_ignore_dismissed_notifications', 10, 2);
151 } else {
152 if ( null !== $nitro = get_nitropack_sdk() ) {
153 $GLOBALS["NitroPack.instance"] = $nitro;
154 if ( get_option( 'nitropack-enableCompression' ) == 1 ) {
155 $nitro->enableCompression();
156 }
157 add_action( 'wp', 'nitropack_init' );
158 }
159 }
160 /**
161 * This function is called when the plugin is activated/deactivated. Works for wp-cli as well.
162 */
163 register_activation_hook( __FILE__, 'nitropack_activate' );
164 register_deactivation_hook( __FILE__, 'nitropack_deactivate' );
165
166 function nitropack_menu() {
167 global $submenu;
168
169 add_menu_page(
170 'NitroPack Options',
171 'NitroPack',
172 'manage_options',
173 'nitropack',
174 'nitropack_options',
175 'dashicons-performance',
176 25
177 );
178 if ( get_nitropack()->getDistribution() !== "oneclick" ) {
179 add_submenu_page(
180 'nitropack',
181 'System Report',
182 'System Report',
183 'manage_options',
184 'admin.php?page=nitropack&subpage=system-report'
185 );
186 }
187 if ( isset( $submenu['nitropack'] ) ) {
188 foreach ( $submenu['nitropack'] as &$item ) {
189 if ( $item[0] === 'NitroPack' ) {
190 $item[0] = 'Dashboard';
191 }
192 }
193 }
194
195 add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'nitropack_action_links' );
196 }
197
198 function nitropack_highlight_submenus( $parent_file ) {
199
200 global $submenu_file;
201
202 if ( isset( $_GET['page'] ) && isset( $_GET['subpage'] ) )
203 $submenu_file = 'admin.php?page=' . $_GET['page'] . '&subpage=' . $_GET['subpage'];
204
205 return $parent_file;
206 }
207 add_filter( 'parent_file', 'nitropack_highlight_submenus' );
208
209 function nitropack_action_links( $links ) {
210 $nitroLinks = array(
211 '<a href="https://support.nitropack.io/hc/en-us/categories/360005122034-Frequently-Asked-Questions-FAQs-" target="_blank" rel="noopener noreferrer">FAQ</a>',
212 '<a href="https://support.nitropack.io/hc/en-us" target="_blank" rel="noopener noreferrer">Docs</a>',
213 '<a href="https://support.nitropack.io/hc/en-us/requests/new" target="_blank" rel="noopener noreferrer">Support</a>',
214 );
215
216 if ( get_nitropack()->getDistribution() == "oneclick" ) {
217 $nitroLinks = apply_filters( "nitropack_oneclick_action_links", $nitroLinks );
218 }
219
220 array_unshift( $nitroLinks, '<a href="' . admin_url( 'admin.php?page=nitropack' ) . '" rel="noopener noreferrer">Settings</a>' );
221
222 return array_merge( $nitroLinks, $links );
223 }
224
225 add_action( 'init', function () {
226 if ( current_user_can( 'manage_options' ) ) {
227
228 // Enqueue admin bar menu custom stylesheet
229 add_action( 'wp_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet' );
230 add_action( 'admin_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet' );
231
232 // Enqueue admin menu custom javascript
233 add_action( 'wp_enqueue_scripts', 'nitropack_admin_bar_script' );
234 add_action( 'admin_enqueue_scripts', 'nitropack_admin_bar_script' );
235
236 // Add our admin menu bar entry
237 add_action( 'admin_bar_menu', 'nitropack_admin_bar_menu', PHP_INT_MAX - 10 );
238 //add_action('plugins_loaded', 'nitropack_plugin_notices'); // Run the checks early, because we need to set some headers. The results from the checks will be cached, so future calls will work as expected.
239
240 add_action( 'updated_option', 'nitropack_updated_option', ~PHP_INT_MAX, 3 );
241
242 \NitroPack\PluginStateHandler::init();
243
244 add_action( 'in_admin_header', function () {
245 $screen = get_current_screen();
246 if ( $screen->id === 'toplevel_page_nitropack' ) {
247 remove_all_actions( 'user_admin_notices' );
248 remove_all_actions( 'admin_notices' );
249 remove_all_actions( 'all_admin_notices' );
250 }
251 }, 10 );
252 }
253 ( new \NitroPack\WordPress\Cron() )->schedule_events();
254 } );
255
256 /**
257 * Load text domain for translations
258 * http://stackoverflow.com/questions/79198701/notice-function-load-textdomain-just-in-time-was-called-incorrectly - for WP 6.7
259 * @return void
260 */
261 function nitropack_load_textdomain() {
262 global $l10n;
263
264 $domain = 'nitropack';
265
266 if ( isset( $l10n[ $domain ] ) ) {
267 return;
268 }
269
270 load_plugin_textdomain( $domain, false, basename( dirname( __FILE__ ) ) . '/languages/' );
271 }
272
273 add_action( 'init', 'nitropack_load_textdomain' );
274