265 lines
8.2 KiB
PHP
265 lines
8.2 KiB
PHP
<?php
|
|
/**
|
|
* Jetpack Boost Plugin
|
|
*
|
|
* @link https://automattic.com
|
|
* @since 0.1.0
|
|
*
|
|
* @wordpress-plugin
|
|
* Plugin Name: Jetpack Boost
|
|
* Plugin URI: https://jetpack.com/boost
|
|
* Description: Boost your WordPress site's performance, from the creators of Jetpack
|
|
* Version: 3.13.0
|
|
* Author: Automattic - Jetpack Site Speed team
|
|
* Author URI: https://jetpack.com/boost/
|
|
* License: GPL-2.0+
|
|
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
|
* Text Domain: jetpack-boost
|
|
* Domain Path: /languages
|
|
* Requires at least: 6.6
|
|
* Requires PHP: 7.2
|
|
*
|
|
* @package automattic/jetpack-boost
|
|
*/
|
|
|
|
namespace Automattic\Jetpack_Boost;
|
|
|
|
// If this file is called directly, abort.
|
|
if ( ! defined( 'WPINC' ) ) {
|
|
die( 0 );
|
|
}
|
|
|
|
define( 'JETPACK_BOOST_VERSION', '3.13.0' );
|
|
define( 'JETPACK_BOOST_SLUG', 'jetpack-boost' );
|
|
|
|
if ( ! defined( 'JETPACK_BOOST_CLIENT_NAME' ) ) {
|
|
define( 'JETPACK_BOOST_CLIENT_NAME', 'jetpack-boost-wp-plugin' );
|
|
}
|
|
|
|
define( 'JETPACK_BOOST_DIR_PATH', __DIR__ );
|
|
define( 'JETPACK_BOOST_PATH', __FILE__ );
|
|
|
|
if ( ! defined( 'JETPACK_BOOST_PLUGIN_BASE' ) ) {
|
|
define( 'JETPACK_BOOST_PLUGIN_BASE', plugin_basename( __FILE__ ) );
|
|
}
|
|
|
|
if ( ! defined( 'JETPACK_BOOST_PLUGIN_FILENAME' ) ) {
|
|
define( 'JETPACK_BOOST_PLUGIN_FILENAME', basename( __FILE__ ) );
|
|
}
|
|
|
|
if ( ! defined( 'JETPACK_BOOST_REST_NAMESPACE' ) ) {
|
|
define( 'JETPACK_BOOST_REST_NAMESPACE', 'jetpack-boost/v1' );
|
|
}
|
|
|
|
// For use in situations where you want additional namespacing.
|
|
if ( ! defined( 'JETPACK_BOOST_REST_PREFIX' ) ) {
|
|
define( 'JETPACK_BOOST_REST_PREFIX', '' );
|
|
}
|
|
|
|
if ( ! defined( 'JETPACK__WPCOM_JSON_API_BASE' ) ) {
|
|
define( 'JETPACK__WPCOM_JSON_API_BASE', 'https://public-api.wordpress.com' );
|
|
}
|
|
|
|
if ( ! defined( 'JETPACK_BOOST_PLUGINS_DIR_URL' ) ) {
|
|
define( 'JETPACK_BOOST_PLUGINS_DIR_URL', plugin_dir_url( __FILE__ ) );
|
|
}
|
|
|
|
/**
|
|
* Setup autoloading
|
|
*/
|
|
$boost_packages_path = JETPACK_BOOST_DIR_PATH . '/vendor/autoload_packages.php';
|
|
if ( is_readable( $boost_packages_path ) ) {
|
|
require_once $boost_packages_path;
|
|
if ( method_exists( \Automattic\Jetpack\Assets::class, 'alias_textdomains_from_file' ) ) {
|
|
\Automattic\Jetpack\Assets::alias_textdomains_from_file( JETPACK_BOOST_DIR_PATH . '/jetpack_vendor/i18n-map.php' );
|
|
}
|
|
} else {
|
|
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
|
/** @noinspection ForgottenDebugOutputInspection */
|
|
error_log( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
|
|
sprintf(
|
|
/* translators: Placeholder is a link to a support document. */
|
|
__( 'Your installation of Jetpack Boost is incomplete. If you installed Jetpack Boost from GitHub, please refer to this document to set up your development environment: %1$s', 'jetpack-boost' ),
|
|
'https://github.com/Automattic/jetpack/blob/trunk/docs/development-environment.md'
|
|
)
|
|
);
|
|
}
|
|
|
|
// Add a red bubble notification to My Jetpack if the installation is bad.
|
|
add_filter(
|
|
'my_jetpack_red_bubble_notification_slugs',
|
|
function ( $slugs ) {
|
|
$slugs['jetpack-boost-plugin-bad-installation'] = array(
|
|
'data' => array(
|
|
'plugin' => 'Jetpack Boost',
|
|
),
|
|
);
|
|
|
|
return $slugs;
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Outputs an admin notice for folks running Jetpack Boost without having run composer install.
|
|
*
|
|
* @since 1.2.0
|
|
*/
|
|
function jetpack_boost_admin_missing_files() {
|
|
if ( get_current_screen()->id !== 'plugins' ) {
|
|
return;
|
|
}
|
|
$message = sprintf(
|
|
wp_kses(
|
|
/* translators: Placeholder is a link to a support document. */
|
|
__( 'Your installation of Jetpack Boost is incomplete. If you installed Jetpack Boost from GitHub, please refer to <a href="%1$s" target="_blank" rel="noopener noreferrer">this document</a> to set up your development environment. Jetpack Boost must have Composer dependencies installed and built via the build command.', 'jetpack-boost' ),
|
|
array(
|
|
'a' => array(
|
|
'href' => array(),
|
|
'target' => array(),
|
|
'rel' => array(),
|
|
),
|
|
)
|
|
),
|
|
'https://github.com/Automattic/jetpack/blob/trunk/docs/development-environment.md#building-your-project'
|
|
);
|
|
wp_admin_notice(
|
|
$message,
|
|
array(
|
|
'type' => 'error',
|
|
'dismissible' => true,
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action( 'admin_notices', __NAMESPACE__ . '\\jetpack_boost_admin_missing_files' );
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Setup Minify service.
|
|
*/
|
|
require_once JETPACK_BOOST_DIR_PATH . '/app/lib/minify/loader.php';
|
|
|
|
// Potential improvement: Make concat URL dir configurable
|
|
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
|
if ( isset( $_SERVER['REQUEST_URI'] ) ) {
|
|
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
|
$request_path = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) )[0];
|
|
|
|
// Handling JETPACK_BOOST_STATIC_PREFIX constant inline to avoid loading the minify module until we know we want it.
|
|
$static_prefix = defined( 'JETPACK_BOOST_STATIC_PREFIX' ) ? JETPACK_BOOST_STATIC_PREFIX : '/_jb_static/';
|
|
if ( $static_prefix === substr( $request_path, -strlen( $static_prefix ) ) ) {
|
|
define( 'JETPACK_BOOST_CONCAT_USE_WP', true );
|
|
|
|
require_once JETPACK_BOOST_DIR_PATH . '/serve-minified-content.php';
|
|
exit( 0 );
|
|
}
|
|
}
|
|
|
|
require plugin_dir_path( __FILE__ ) . 'app/class-jetpack-boost.php';
|
|
|
|
/**
|
|
* Begins execution of the plugin.
|
|
*
|
|
* @since 0.1.0
|
|
*/
|
|
function run_jetpack_boost() {
|
|
new Jetpack_Boost();
|
|
}
|
|
|
|
add_action( 'plugins_loaded', '\Automattic\Jetpack_Boost\run_jetpack_boost', 1 );
|
|
|
|
register_activation_hook( __FILE__, array( 'Automattic\Jetpack_Boost\Jetpack_Boost', 'activate' ) );
|
|
|
|
// Redirect to plugin page when the plugin is activated.
|
|
add_action( 'activated_plugin', __NAMESPACE__ . '\jetpack_boost_plugin_activation' );
|
|
|
|
/**
|
|
* Redirects to plugin page when the plugin is activated
|
|
*
|
|
* @access public
|
|
* @static
|
|
*
|
|
* @param string $plugin Path to the plugin file relative to the plugins directory.
|
|
*/
|
|
function jetpack_boost_plugin_activation( $plugin ) {
|
|
if (
|
|
JETPACK_BOOST_PLUGIN_BASE === $plugin &&
|
|
( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_BOOST_PLUGIN_BASE )
|
|
) {
|
|
wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-boost' ) ) );
|
|
exit( 0 );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Extra tweaks to make Jetpack Boost work better with others, that need to be loaded early.
|
|
*/
|
|
function include_compatibility_files_early() {
|
|
// Since Page Optimize allows its functionality to be disabled on plugins_loaded (10)
|
|
// we need to do this earlier.
|
|
if ( function_exists( 'page_optimize_init' ) ) {
|
|
require_once __DIR__ . '/compatibility/page-optimize.php';
|
|
}
|
|
}
|
|
|
|
add_action( 'plugins_loaded', __NAMESPACE__ . '\include_compatibility_files_early', 1 );
|
|
|
|
/**
|
|
* Extra tweaks to make Jetpack Boost work better with others.
|
|
*/
|
|
function include_compatibility_files() {
|
|
if ( class_exists( 'Jetpack' ) ) {
|
|
require_once __DIR__ . '/compatibility/jetpack.php';
|
|
}
|
|
|
|
if ( class_exists( 'WooCommerce' ) ) {
|
|
require_once __DIR__ . '/compatibility/woocommerce.php';
|
|
}
|
|
|
|
if ( class_exists( '\Google\Web_Stories\Plugin' ) ) {
|
|
require_once __DIR__ . '/compatibility/web-stories.php';
|
|
}
|
|
|
|
if ( defined( '\Elementor\TemplateLibrary\Source_Local::CPT' ) || defined( '\Elementor\Modules\LandingPages\Module::CPT' ) ) {
|
|
require_once __DIR__ . '/compatibility/elementor.php';
|
|
}
|
|
|
|
if ( function_exists( 'amp_is_request' ) ) {
|
|
require_once __DIR__ . '/compatibility/class-amp.php';
|
|
}
|
|
|
|
if ( function_exists( 'wp_cache_is_enabled' ) ) {
|
|
require_once __DIR__ . '/compatibility/wp-super-cache.php';
|
|
}
|
|
|
|
if ( class_exists( '\Yoast\WP\SEO\Main' ) ) {
|
|
require_once __DIR__ . '/compatibility/yoast.php';
|
|
}
|
|
|
|
if ( function_exists( 'aioseo' ) ) {
|
|
require_once __DIR__ . '/compatibility/aioseo.php';
|
|
}
|
|
|
|
// Exclude known scripts that causes problem when concatenated.
|
|
require_once __DIR__ . '/compatibility/js-concatenate.php';
|
|
|
|
// Migrate from WP Super Cache
|
|
require_once __DIR__ . '/compatibility/wp-super-cache-migration.php';
|
|
}
|
|
|
|
add_action( 'plugins_loaded', __NAMESPACE__ . '\include_compatibility_files' );
|
|
|
|
register_uninstall_hook( __FILE__, 'Automattic\Jetpack_Boost\jetpack_boost_uninstall' );
|
|
/**
|
|
* Clean up when uninstalling Jetpack Boost
|
|
*/
|
|
function jetpack_boost_uninstall() {
|
|
$boost = new Jetpack_Boost();
|
|
$boost->uninstall();
|
|
}
|
|
|
|
/**
|
|
* Initialize Data Sync
|
|
*/
|
|
require_once __DIR__ . '/wp-js-data-sync.php';
|