.
*/
/**
* All in One SEO Pack.
* The original WordPress SEO plugin.
*
* @package All-in-One-SEO-Pack
* @version 3.3.5
*/
if ( ! defined( 'AIOSEOPPRO' ) ) {
define( 'AIOSEOPPRO', false );
}
if ( ! defined( 'AIOSEOP_PLUGIN_NAME' ) ) {
if ( ! AIOSEOPPRO ) {
define( 'AIOSEOP_PLUGIN_NAME', 'All in One SEO Pack' );
} else {
define( 'AIOSEOP_PLUGIN_NAME', 'All in One SEO Pack Pro' );
}
}
if ( ! defined( 'AIOSEOP_VERSION' ) ) {
define( 'AIOSEOP_VERSION', '3.3.5' );
}
/*
* DO NOT EDIT BELOW THIS LINE.
*/
if ( ! defined( 'ABSPATH' ) ) {
return;
}
if ( AIOSEOPPRO ) {
add_action( 'admin_head', 'disable_all_in_one_free', 1 );
}
if ( ! function_exists( 'aiosp_add_cap' ) ) {
/**
* AIOSEOP Add Capabilities
*
* @since 2.3.6
*/
function aiosp_add_cap() {
/*
* TODO we should put this into an install script. We just need to make sure it runs soon enough and we need to make
* sure people updating from previous versions have access to it.
*/
$role = get_role( 'administrator' );
if ( is_object( $role ) ) {
$role->add_cap( 'aiosp_manage_seo' );
}
}
}
add_action( 'plugins_loaded', 'aiosp_add_cap' );
if ( ! defined( 'AIOSEOP_PLUGIN_DIR' ) ) {
define( 'AIOSEOP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
} elseif ( AIOSEOP_PLUGIN_DIR !== plugin_dir_path( __FILE__ ) ) {
/*
This is not a great message.
add_action( 'admin_notices', create_function( '', 'echo "' . "
" . sprintf(
__( "%s detected a conflict; please deactivate the plugin located in %s.", 'all-in-one-seo-pack' ),
$aioseop_plugin_name, AIOSEOP_PLUGIN_DIR ) . "
" . '";' ) );
*/
return;
}
if ( ! defined( 'AIOSEOP_PLUGIN_BASENAME' ) ) {
define( 'AIOSEOP_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
}
if ( ! defined( 'AIOSEOP_PLUGIN_DIRNAME' ) ) {
define( 'AIOSEOP_PLUGIN_DIRNAME', dirname( AIOSEOP_PLUGIN_BASENAME ) );
}
if ( ! defined( 'AIOSEOP_PLUGIN_URL' ) ) {
define( 'AIOSEOP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
}
if ( ! defined( 'AIOSEOP_PLUGIN_IMAGES_URL' ) ) {
define( 'AIOSEOP_PLUGIN_IMAGES_URL', AIOSEOP_PLUGIN_URL . 'images/' );
}
if ( ! defined( 'AIOSEOP_BASELINE_MEM_LIMIT' ) ) {
define( 'AIOSEOP_BASELINE_MEM_LIMIT', '256M' );
} // 256MB
if ( ! defined( 'WP_CONTENT_URL' ) ) {
define( 'WP_CONTENT_URL', site_url() . '/wp-content' );
}
if ( ! defined( 'WP_ADMIN_URL' ) ) {
define( 'WP_ADMIN_URL', site_url() . '/wp-admin' );
}
if ( ! defined( 'WP_CONTENT_DIR' ) ) {
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
}
if ( ! defined( 'WP_PLUGIN_URL' ) ) {
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' );
}
if ( ! defined( 'WP_PLUGIN_DIR' ) ) {
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
}
global $aiosp, $aioseop_options, $aioseop_modules, $aioseop_module_list, $aiosp_activation, $aioseop_mem_limit, $aioseop_get_pages_start, $aioseop_admin_menu;
$aioseop_get_pages_start = 0;
$aioseop_admin_menu = 0;
if ( AIOSEOPPRO ) {
global $aioseop_update_checker;
}
$aioseop_options = get_option( 'aioseop_options' );
// @codingStandardsIgnoreStart
$aioseop_mem_limit = @ini_get( 'memory_limit' );
// @codingStandardsIgnoreEnd
if ( ! function_exists( 'aioseop_convert_bytestring' ) ) {
/**
* AIOSEOP Convert Bytestring
*
* @since ?
*
* @param $byte_string
* @return int
*/
function aioseop_convert_bytestring( $byte_string ) {
$num = 0;
preg_match( '/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i', $byte_string, $matches );
if ( ! empty( $matches ) ) {
$num = (float) $matches[1];
switch ( strtoupper( $matches[2] ) ) {
case 'E':
$num *= 1024;
// fall through.
case 'P':
$num *= 1024;
// fall through.
case 'T':
$num *= 1024;
// fall through.
case 'G':
$num *= 1024;
// fall through.
case 'M':
$num *= 1024;
// fall through.
case 'K':
$num *= 1024;
}
}
return intval( $num );
}
}
if ( is_array( $aioseop_options ) && isset( $aioseop_options['modules'] ) && isset( $aioseop_options['modules']['aiosp_performance_options'] ) ) {
$perf_opts = $aioseop_options['modules']['aiosp_performance_options'];
if ( isset( $perf_opts['aiosp_performance_memory_limit'] ) ) {
$aioseop_mem_limit = $perf_opts['aiosp_performance_memory_limit'];
}
if ( isset( $perf_opts['aiosp_performance_execution_time'] ) && ( '' !== $perf_opts['aiosp_performance_execution_time'] ) ) {
// @codingStandardsIgnoreStart
@ini_set( 'max_execution_time', (int) $perf_opts['aiosp_performance_execution_time'] );
@set_time_limit( (int) $perf_opts['aiosp_performance_execution_time'] );
// @codingStandardsIgnoreEnd
}
} else {
$aioseop_mem_limit = aioseop_convert_bytestring( $aioseop_mem_limit );
if ( ( $aioseop_mem_limit > 0 ) && ( $aioseop_mem_limit < AIOSEOP_BASELINE_MEM_LIMIT ) ) {
$aioseop_mem_limit = AIOSEOP_BASELINE_MEM_LIMIT;
}
}
if ( ! empty( $aioseop_mem_limit ) ) {
if ( ! is_int( $aioseop_mem_limit ) ) {
$aioseop_mem_limit = aioseop_convert_bytestring( $aioseop_mem_limit );
}
if ( ( $aioseop_mem_limit > 0 ) && ( $aioseop_mem_limit <= AIOSEOP_BASELINE_MEM_LIMIT ) ) {
// @codingStandardsIgnoreStart
@ini_set( 'memory_limit', $aioseop_mem_limit );
// @codingStandardsIgnoreEnd
}
}
$aiosp_activation = false;
// List all available modules here.
$aioseop_module_list = array(
'sitemap',
'opengraph',
'robots',
'file_editor',
'importer_exporter',
'bad_robots',
'performance',
);
if ( AIOSEOPPRO ) {
$aioseop_module_list[] = 'video_sitemap';
}
if ( class_exists( 'All_in_One_SEO_Pack' ) ) {
add_action( 'admin_notices', 'admin_notices_already_defined' );
/**
* Admin Notices Already Defined
*
* @throws ReflectionException
*/
function admin_notices_already_defined() {
echo "The All In One SEO Pack class is already defined";
if ( class_exists( 'ReflectionClass' ) ) {
$_r = new ReflectionClass( 'All_in_One_SEO_Pack' );
echo ' in ' . $_r->getFileName();
}
echo ', preventing All In One SEO Pack from loading.
';
}
return;
}
if ( AIOSEOPPRO ) {
require( AIOSEOP_PLUGIN_DIR . 'pro/sfwd_update_checker.php' );
$aiosp_update_url = 'https://semperplugins.com/upgrade_plugins.php';
if ( defined( 'AIOSEOP_UPDATE_URL' ) ) {
$aiosp_update_url = AIOSEOP_UPDATE_URL;
}
$aioseop_update_checker = new SFWD_Update_Checker(
$aiosp_update_url,
__FILE__,
'aioseop'
);
$aioseop_update_checker->plugin_name = AIOSEOP_PLUGIN_NAME;
$aioseop_update_checker->plugin_basename = AIOSEOP_PLUGIN_BASENAME;
if ( ! empty( $aioseop_options['aiosp_license_key'] ) ) {
$aioseop_update_checker->license_key = $aioseop_options['aiosp_license_key'];
} else {
$aioseop_update_checker->license_key = '';
}
$aioseop_update_checker->options_page = AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class.php';
$aioseop_update_checker->renewal_page = 'https://semperplugins.com/all-in-one-seo-pack-pro-version/';
$aioseop_update_checker->addQueryArgFilter( array( $aioseop_update_checker, 'add_secret_key' ) );
}
if ( ! function_exists( 'aioseop_activate' ) ) {
/**
* AIOSEOP Activate
*
* @since ?
*/
function aioseop_activate() {
// Check if we just got activated.
global $aiosp_activation;
if ( AIOSEOPPRO ) {
global $aioseop_update_checker;
}
$aiosp_activation = true;
require_once AIOSEOP_PLUGIN_DIR . 'admin/class-aioseop-notices.php';
global $aioseop_notices;
// $aioseop_notices->reset_notice( 'review_plugin' );
// These checks might be duplicated in the function being called.
if ( ! is_network_admin() || ! isset( $_GET['activate-multi'] ) ) {
set_transient( '_aioseop_activation_redirect', true, 30 ); // Sets 30 second transient for welcome screen redirect on activation.
}
delete_user_meta( get_current_user_id(), 'aioseop_yst_detected_notice_dismissed' );
if ( AIOSEOPPRO ) {
global $aioseop_options;
$aioseop_update_checker->checkForUpdates();
if (
isset( $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_video_sitemap'] ) &&
'on' === $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_video_sitemap']
) {
$next_scan_timestamp = wp_next_scheduled( 'aiosp_video_sitemap_scan' );
if ( false !== $next_scan_timestamp && 10 < ( $next_scan_timestamp - time() ) ) {
// Reschedule cron job to avoid waiting for next (daily) scan.
wp_unschedule_event( $next_scan_timestamp, 'aiosp_video_sitemap_scan' );
$next_scan_timestamp = false;
}
if ( false === $next_scan_timestamp ) {
wp_schedule_single_event( time() + 10, 'aiosp_video_sitemap_scan' );
}
}
}
}
}
add_action( 'plugins_loaded', 'aioseop_init_class' );
if ( ! function_exists( 'aiosp_plugin_row_meta' ) ) {
add_filter( 'plugin_row_meta', 'aiosp_plugin_row_meta', 10, 2 );
/**
* AIOSEOP Plugin Row Meta
*
* @since 2.3.3
*
* @param $actions
* @param $plugin_file
*
* @return array
*/
function aiosp_plugin_row_meta( $actions, $plugin_file ) {
$action_links = array(
'settings' => array(
/* translators: This is an action link users can click to open a feature request/bug report on GitHub. */
'label' => __( 'Feature Request/Bug Report', 'all-in-one-seo-pack' ),
'url' => 'https://github.com/semperfiwebdesign/all-in-one-seo-pack/issues/new',
),
);
return aiosp_action_links( $actions, $plugin_file, $action_links, 'after' );
}
}
if ( ! function_exists( 'aiosp_add_action_links' ) ) {
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'aiosp_add_action_links', 10, 2 );
/**
* AIOSEOP Add Action Links
*
* @since 2.3
*
* @param $actions
* @param $plugin_file
* @return array
*/
function aiosp_add_action_links( $actions, $plugin_file ) {
if ( ! is_array( $actions ) ) {
return $actions;
}
$aioseop_plugin_dirname = AIOSEOP_PLUGIN_DIRNAME;
$action_links = array();
$action_links = array(
'settings' => array(
/* translators: This is an action link users can click to open the General Settings menu. */
'label' => __( 'SEO Settings', 'all-in-one-seo-pack' ),
'url' => get_admin_url( null, "admin.php?page=$aioseop_plugin_dirname/aioseop_class.php" ),
),
'forum' => array(
/* translators: This is an action link users can click to open our premium support forum. */
'label' => __( 'Support Forum', 'all-in-one-seo-pack' ),
'url' => 'https://semperplugins.com/support/',
),
'docs' => array(
/* translators: This is an action link users can click to open our general documentation page. */
'label' => __( 'Documentation', 'all-in-one-seo-pack' ),
'url' => 'https://semperplugins.com/documentation/',
),
);
unset( $actions['edit'] );
if ( ! AIOSEOPPRO ) {
$action_links['proupgrade'] =
array(
/* translators: This is an action link users can click to purchase a license for All in One SEO Pack Pro. */
'label' => __( 'Upgrade to Pro', 'all-in-one-seo-pack' ),
'url' => 'https://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/?loc=plugins',
);
}
return aiosp_action_links( $actions, $plugin_file, $action_links, 'before' );
}
}
if ( ! function_exists( 'aiosp_action_links' ) ) {
/**
* AIOSEOP Action Links
*
* @since 2.3
*
* @param $actions
* @param $plugin_file
* @param array $action_links
* @param string $position
* @return array
*/
function aiosp_action_links( $actions, $plugin_file, $action_links = array(), $position = 'after' ) {
static $plugin;
if ( ! isset( $plugin ) ) {
$plugin = plugin_basename( __FILE__ );
}
if ( $plugin === $plugin_file && ! empty( $action_links ) ) {
foreach ( $action_links as $key => $value ) {
$link = array( $key => '' . $value['label'] . '' );
if ( 'after' === $position ) {
$actions = array_merge( $actions, $link );
} else {
$actions = array_merge( $link, $actions );
}
}//foreach
}// if
return $actions;
}
}
if ( ! function_exists( 'aioseop_init_class' ) ) {
/**
* Inits All-in-One-Seo plugin class.
*
* @global AIOSEOP_Notices $aioseop_notices
*
* @since 2.3
* @since 2.3.12.3 Loads third party compatibility class.
*/
function aioseop_init_class() {
global $aiosp;
load_plugin_textdomain( 'all-in-one-seo-pack', false, dirname( plugin_basename( __FILE__ ) ) . '/i18n/' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/aioseop_functions.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'aioseop_class.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/aioseop_updates_class.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/commonstrings.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/general-metaboxes.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/aiosp_common.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'admin/meta_import.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/translations.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'public/opengraph.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/compatibility/abstract/aiosep_compatible.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/compatibility/compat-init.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/compatibility/php-functions.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'public/front.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'public/google-analytics.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/welcome.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/dashboard_widget.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/menu.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'admin/class-aioseop-notices.php' );
require_once( AIOSEOP_PLUGIN_DIR . 'inc/schema/schema-builder.php' );
$aioseop_welcome = new aioseop_welcome(); // TODO move this to updates file.
if ( AIOSEOPPRO ) {
// Loads pro files and other pro init stuff.
require_once( AIOSEOP_PLUGIN_DIR . 'pro/class-aio-pro-init.php' );
}
// call importer functions... this should be moved somewhere better.
aiosp_seometa_import();
$aiosp = new All_in_One_SEO_Pack();
$aioseop_updates = new AIOSEOP_Updates();
if ( AIOSEOPPRO ) {
$aioseop_pro_updates = new AIOSEOP_Pro_Updates();
add_action( 'admin_init', array( $aioseop_pro_updates, 'version_updates' ), 12 );
}
add_action( 'admin_init', 'aioseop_welcome' );
if ( aioseop_option_isset( 'aiosp_unprotect_meta' ) ) {
add_filter( 'is_protected_meta', 'aioseop_unprotect_meta', 10, 3 );
}
add_action( 'init', array( $aiosp, 'add_hooks' ) );
add_action( 'plugins_loaded', array( $aioseop_updates, 'version_updates' ), 11 );
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
// add_action( 'admin_init', 'aioseop_review_plugin_notice' );
if ( wp_doing_ajax() && ! empty( $_POST ) && ! empty( $_POST['action'] ) && 'aioseop_ajax_scan_header' === $_POST['action'] ) {
remove_action( 'init', array( $aiosp, 'add_hooks' ) );
add_action( 'admin_init', 'aioseop_scan_post_header' );
// if the action doesn't run -- pdb.
add_action( 'shutdown', 'aioseop_ajax_scan_header' );
include_once( ABSPATH . 'wp-admin/includes/screen.php' );
global $current_screen;
if ( class_exists( 'WP_Screen' ) ) {
$current_screen = WP_Screen::get( 'front' );
}
}
}
}
if ( ! function_exists( 'aioseop_review_plugin_notice' ) ) {
/**
* Review Plugin Notice
*
* Activates the review notice.
* Note: This couldn't be used directly in `aioseop_init_class()` since ajax instances was causing
* the database options to reset.
*
* @since 3.0
*/
function aioseop_review_plugin_notice() {
global $aioseop_notices;
// $aioseop_notices->activate_notice( 'review_plugin' );
}
}
if ( ! function_exists( 'aioseop_admin_enqueue_styles' ) ) {
/**
* Admin Enqueue Styles
*
* Styles used in various parts of WordPress admin, and not just AIOSEOP's screens.
* Note: If styles are specific to a given module, then use that module's admin_enqueue_styles() method, or parent method.
*
* @todo Refactor this into a core file.
*
* @since 3.0
*
* @see 'admin_enqueue_scripts' hook
* @link https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/
*
* @param string $hook_suffix
*/
function aioseop_admin_enqueue_styles( $hook_suffix ) {
// Font Icons.
if ( ! wp_style_is( 'aioseop-font-icons', 'registered' ) && ! wp_style_is( 'aioseop-font-icons', 'enqueued' ) ) {
wp_enqueue_style(
'aioseop-font-icons',
AIOSEOP_PLUGIN_URL . 'css/aioseop-font-icons.css',
array(),
AIOSEOP_VERSION
);
}
if ( function_exists( 'is_rtl' ) && is_rtl() ) {
if ( ! wp_style_is( 'aioseop-font-icons-rtl', 'registered' ) && ! wp_style_is( 'aioseop-font-icons-rtl', 'enqueued' ) ) {
wp_enqueue_style(
'aioseop-font-icons-rtl',
AIOSEOP_PLUGIN_URL . 'css/aioseop-font-icons-rtl.css',
array(),
AIOSEOP_VERSION
);
}
}
}
}
if ( ! function_exists( 'aioseop_welcome' ) ) {
function aioseop_welcome() {
if ( get_transient( '_aioseop_activation_redirect' ) ) {
$aioseop_welcome = new aioseop_welcome();
delete_transient( '_aioseop_activation_redirect' );
$aioseop_welcome->init( true );
}
}
}
add_action( 'init', 'aioseop_load_modules', 1 );
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
// add_action( 'after_setup_theme', 'aioseop_load_modules' );
if ( is_admin() || defined( 'AIOSEOP_UNIT_TESTING' ) ) {
add_action( 'wp_ajax_aioseop_ajax_save_meta', 'aioseop_ajax_save_meta' );
add_action( 'wp_ajax_aioseop_ajax_save_url', 'aioseop_ajax_save_url' );
add_action( 'wp_ajax_aioseop_ajax_delete_url', 'aioseop_ajax_delete_url' );
add_action( 'wp_ajax_aioseop_ajax_scan_header', 'aioseop_ajax_scan_header' );
if ( AIOSEOPPRO ) {
add_action( 'wp_ajax_aioseop_ajax_facebook_debug', 'aioseop_ajax_facebook_debug' );
}
add_action( 'wp_ajax_aioseop_ajax_save_settings', 'aioseop_ajax_save_settings' );
add_action( 'wp_ajax_aioseop_ajax_get_menu_links', 'aioseop_ajax_get_menu_links' );
add_action( 'wp_ajax_aioseo_dismiss_yst_notice', 'aioseop_update_yst_detected_notice' );
add_action( 'wp_ajax_aioseo_dismiss_visibility_notice', 'aioseop_update_user_visibilitynotice' );
add_action( 'wp_ajax_aioseo_dismiss_woo_upgrade_notice', 'aioseop_woo_upgrade_notice_dismissed' );
add_action( 'admin_enqueue_scripts', 'aioseop_admin_enqueue_styles' );
}
if ( ! function_exists( 'aioseop_scan_post_header' ) ) {
function aioseop_scan_post_header() {
require_once( ABSPATH . WPINC . '/default-filters.php' );
global $wp_query;
$wp_query->query_vars['paged'] = 0;
query_posts( 'post_type=post&posts_per_page=1' );
if ( have_posts() ) {
the_post();
}
}
}
require_once( AIOSEOP_PLUGIN_DIR . 'aioseop-init.php' );
if ( ! function_exists( 'aioseop_install' ) ) {
register_activation_hook( __FILE__, 'aioseop_install' );
function aioseop_install() {
aioseop_activate();
}
}
if ( ! function_exists( 'disable_all_in_one_free' ) ) {
function disable_all_in_one_free() {
if ( AIOSEOPPRO && is_plugin_active( 'all-in-one-seo-pack/all_in_one_seo_pack.php' ) ) {
deactivate_plugins( 'all-in-one-seo-pack/all_in_one_seo_pack.php' );
}
}
}