You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
7.1 KiB
PHP
265 lines
7.1 KiB
PHP
<?php
|
|
/**
|
|
* The admin notices.
|
|
*
|
|
* @since 0.9.0
|
|
* @package RankMath
|
|
* @subpackage RankMath\Admin
|
|
* @author Rank Math <support@rankmath.com>
|
|
*/
|
|
|
|
namespace RankMath\Admin;
|
|
|
|
use RankMath\Runner;
|
|
use RankMath\Helper;
|
|
use RankMath\Traits\Ajax;
|
|
use RankMath\Traits\Hooker;
|
|
use RankMath\Helpers\Sitepress;
|
|
use RankMath\Helpers\Param;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Notices class.
|
|
*/
|
|
class Notices implements Runner {
|
|
|
|
use Hooker, Ajax;
|
|
|
|
/**
|
|
* Register hooks.
|
|
*/
|
|
public function hooks() {
|
|
$this->action( 'admin_init', 'notices' );
|
|
$this->action( 'wp_helpers_notification_dismissed', 'notice_dismissible' );
|
|
}
|
|
|
|
/**
|
|
* Run all notices routine.
|
|
*/
|
|
public function notices() {
|
|
$this->is_plugin_configured();
|
|
$this->new_post_type();
|
|
$this->convert_wpml_settings();
|
|
$this->permalink_changes_warning();
|
|
}
|
|
|
|
/**
|
|
* Set known post type after notice dismissal.
|
|
*
|
|
* @param string $notification_id Notification id.
|
|
*/
|
|
public function notice_dismissible( $notification_id ) {
|
|
if ( 'new_post_type' === $notification_id ) {
|
|
$current = get_post_types( [ 'public' => true ] );
|
|
update_option( 'rank_math_known_post_types', $current );
|
|
|
|
if ( Helper::is_module_active( 'sitemap' ) ) {
|
|
\RankMath\Sitemap\Cache::invalidate_storage();
|
|
}
|
|
return;
|
|
}
|
|
|
|
if ( 'convert_wpml_settings' === $notification_id ) {
|
|
update_option( 'rank_math_wpml_notice_dismissed', true );
|
|
}
|
|
|
|
if ( 'rank-math-site-url-mismatch' === $notification_id ) {
|
|
update_option( 'rank_math_siteurl_mismatch_notice_dismissed', true );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* If plugin configuration not done.
|
|
*/
|
|
private function is_plugin_configured() {
|
|
if ( 'mts-install-plugins' === Param::get( 'page' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( rank_math()->notification->get_notification_by_id( 'plugin_not_setup' ) && ! Helper::is_configured() ) {
|
|
$message = sprintf(
|
|
'<b>Warning!</b> You didn\'t set up your Rank Math SEO plugin yet, which means you\'re missing out on essential settings and tweaks! <a href="%s">Complete your setup by clicking here.</a>',
|
|
Helper::get_admin_url( 'wizard' )
|
|
);
|
|
Helper::add_notification(
|
|
$message,
|
|
[
|
|
'type' => 'warning',
|
|
'id' => 'plugin_not_setup',
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add notification if a new post type is detected.
|
|
*/
|
|
private function new_post_type() {
|
|
$known = get_option( 'rank_math_known_post_types', [] );
|
|
$current = Helper::get_accessible_post_types();
|
|
$new = array_diff( $current, $known );
|
|
|
|
if ( empty( $new ) ) {
|
|
return;
|
|
}
|
|
|
|
$list = '<code>' . implode( '</code>, <code>', $new ) . '</code>';
|
|
/* Translators: placeholder is the post type name. */
|
|
$message = __( 'Rank Math has detected a new post type: %1$s. You may want to check the settings of the <a href="%2$s">Titles & Meta page</a>.', 'rank-math' );
|
|
$count = count( $new );
|
|
if ( $count > 1 ) {
|
|
/* Translators: placeholder is the post type names separated with commas. */
|
|
$message = __( 'Rank Math has detected new post types: %1$s. You may want to check the settings of the <a href="%2$s">Titles & Meta page</a>.', 'rank-math' );
|
|
}
|
|
|
|
$message = $this->do_filter( 'admin/notice/new_post_type', $message, $count );
|
|
$message = sprintf( wp_kses_post( $message ), $list, Helper::get_admin_url( 'options-titles#setting-panel-post-type-' . key( $new ) ), Helper::get_admin_url( 'options-sitemap#setting-panel-sitemap-post-type-' . key( $new ) ) );
|
|
Helper::add_notification(
|
|
$message,
|
|
[
|
|
'type' => 'info',
|
|
'id' => 'new_post_type',
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Function to show Show String Translation plugin notice and convert the settings.
|
|
*/
|
|
private function convert_wpml_settings() {
|
|
if ( ! Sitepress::get()->is_active() || get_option( 'rank_math_wpml_data_converted' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! function_exists( 'icl_add_string_translation' ) ) {
|
|
if ( ! get_option( 'rank_math_wpml_notice_dismissed' ) ) {
|
|
Helper::add_notification(
|
|
__( 'Please activate the WPML String Translation plugin to convert Rank Math Setting values in different languages.', 'rank-math' ),
|
|
[
|
|
'type' => 'error',
|
|
'id' => 'convert_wpml_settings',
|
|
]
|
|
);
|
|
}
|
|
return;
|
|
}
|
|
|
|
$languages = icl_get_languages();
|
|
foreach ( $languages as $lang_code => $language ) {
|
|
|
|
foreach ( [ 'general', 'titles' ] as $option ) {
|
|
$data = get_option( "rank-math-options-{$option}_$lang_code" );
|
|
if ( empty( $data ) ) {
|
|
continue;
|
|
}
|
|
|
|
$common_data = array_intersect( array_keys( $data ), $this->get_translatable_options() );
|
|
if ( empty( $common_data ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $common_data as $option_key ) {
|
|
$string_id = icl_get_string_id( Helper::get_settings( "$option.$option_key" ), "admin_texts_rank-math-options-$option" );
|
|
icl_add_string_translation( $string_id, $lang_code, $data[ $option_key ], 10 );
|
|
}
|
|
}
|
|
}
|
|
|
|
update_option( 'rank_math_wpml_data_converted', true );
|
|
}
|
|
|
|
/**
|
|
* Get Translatable option keys.
|
|
*
|
|
* @return array
|
|
*/
|
|
private function get_translatable_options() {
|
|
$options = [
|
|
'img_alt_format',
|
|
'img_title_format',
|
|
'breadcrumbs_separator',
|
|
'breadcrumbs_prefix',
|
|
'breadcrumbs_home_link',
|
|
'breadcrumbs_home_label',
|
|
'breadcrumbs_archive_format',
|
|
'breadcrumbs_search_format',
|
|
'breadcrumbs_404_label',
|
|
'rss_before_content',
|
|
'rss_after_content',
|
|
|
|
'title_separator',
|
|
'homepage_title',
|
|
'homepage_description',
|
|
'homepage_facebook_title',
|
|
'homepage_facebook_description',
|
|
'author_archive_title',
|
|
'author_archive_description',
|
|
'date_archive_title',
|
|
'date_archive_description',
|
|
'search_title',
|
|
'404_title',
|
|
];
|
|
|
|
$post_types = Helper::get_accessible_post_types();
|
|
foreach ( $post_types as $post_type => $data ) {
|
|
$options = array_merge(
|
|
$options,
|
|
[
|
|
"pt_{$post_type}_title",
|
|
"pt_{$post_type}_description",
|
|
"pt_{$post_type}_archive_title",
|
|
"pt_{$post_type}_archive_description",
|
|
"pt_{$post_type}_default_snippet_name",
|
|
"pt_{$post_type}_default_snippet_desc",
|
|
]
|
|
);
|
|
}
|
|
|
|
$taxonomies = Helper::get_accessible_taxonomies();
|
|
foreach ( $taxonomies as $taxonomy => $data ) {
|
|
$options = array_merge(
|
|
$options,
|
|
[
|
|
"tax_{$taxonomy}_title",
|
|
"tax_{$taxonomy}_description",
|
|
]
|
|
);
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Maybe add notice on Permalinks page about the risks of changing the permalinks on a live site.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function permalink_changes_warning() {
|
|
global $pagenow;
|
|
if ( 'options-permalink.php' !== $pagenow ) {
|
|
return;
|
|
}
|
|
|
|
$this->action( 'admin_enqueue_scripts', 'add_permalink_changes_warning', 12 );
|
|
}
|
|
|
|
/**
|
|
* Add the notice for the Permalinks page.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function add_permalink_changes_warning() {
|
|
wp_enqueue_script( 'rank-math-core-permalink-settings' );
|
|
$message = __( '<b>Rank Math Warning:</b> Changing the permalinks on a live, indexed site may result in serious loss of traffic if done incorrectly. Consider adding a new redirection from the old URL format to the new one.', 'rank-math' );
|
|
Helper::add_notification(
|
|
$message,
|
|
[
|
|
'type' => 'warning',
|
|
'screen' => 'options-permalink',
|
|
'classes' => 'hidden rank-math-notice-permalinks-warning is-dismissible',
|
|
]
|
|
);
|
|
}
|
|
}
|