You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
5 years ago
|
<?php
|
||
|
/**
|
||
|
* WPSEO plugin file.
|
||
|
*
|
||
|
* @package WPSEO\Admin
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* A WordPress integration that listens for whether the SEO changes have been saved successfully.
|
||
|
*/
|
||
|
class WPSEO_Admin_Settings_Changed_Listener implements WPSEO_WordPress_Integration {
|
||
|
|
||
|
/**
|
||
|
* Have the Yoast SEO settings been saved.
|
||
|
*
|
||
|
* @var bool
|
||
|
*/
|
||
|
private static $settings_saved = false;
|
||
|
|
||
|
/**
|
||
|
* Registers all hooks to WordPress.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function register_hooks() {
|
||
|
add_action( 'admin_init', array( $this, 'intercept_save_update_notification' ) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks and overwrites the wp_settings_errors global to determine whether the Yoast SEO settings have been saved.
|
||
|
*/
|
||
|
public function intercept_save_update_notification() {
|
||
|
global $pagenow;
|
||
|
|
||
|
if ( $pagenow !== 'admin.php' || ! WPSEO_Utils::is_yoast_seo_page() ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Variable name is the same as the global that is set by get_settings_errors.
|
||
|
$wp_settings_errors = get_settings_errors();
|
||
|
|
||
|
foreach ( $wp_settings_errors as $key => $wp_settings_error ) {
|
||
|
if ( ! $this->is_settings_updated_notification( $wp_settings_error ) ) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
self::$settings_saved = true;
|
||
|
unset( $wp_settings_errors[ $key ] );
|
||
|
// Overwrite the global with the list excluding the Changed saved message.
|
||
|
$GLOBALS['wp_settings_errors'] = $wp_settings_errors;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks whether the settings notification is a settings_updated notification.
|
||
|
*
|
||
|
* @param array $wp_settings_error The settings object.
|
||
|
*
|
||
|
* @return bool Whether this is a settings updated settings notification.
|
||
|
*/
|
||
|
public function is_settings_updated_notification( $wp_settings_error ) {
|
||
|
return ! empty( $wp_settings_error['code'] ) && $wp_settings_error['code'] === 'settings_updated';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get whether the settings have successfully been saved
|
||
|
*
|
||
|
* @return bool Whether the settings have successfully been saved.
|
||
|
*/
|
||
|
public function have_settings_been_saved() {
|
||
|
return self::$settings_saved;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Renders a success message if the Yoast SEO settings have been saved.
|
||
|
*/
|
||
|
public function show_success_message() {
|
||
|
if ( $this->have_settings_been_saved() ) {
|
||
|
echo '<p class="wpseo-message"><span class="dashicons dashicons-yes"></span>',
|
||
|
esc_html__( 'Settings saved.', 'wordpress-seo' ),
|
||
|
'</p>';
|
||
|
}
|
||
|
}
|
||
|
}
|