| Current Path : /home/x/b/o/xbodynamge/namtation/wp-content/ |
| Current File : /home/x/b/o/xbodynamge/namtation/wp-content/GeneralSettings.php.tar |
xbodynamge/namtation/wp-content/plugins/all-in-one-seo-pack/app/Common/Migration/GeneralSettings.php0000644 00000103572 15114047507 0030542 0 ustar 00 home <?php
namespace AIOSEO\Plugin\Common\Migration;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings from V3.
*
* @since 4.0.0
*/
class GeneralSettings {
/**
* The old V3 options.
*
* @since 4.0.0
*
* @var array
*/
protected $oldOptions = [];
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->oldOptions = aioseo()->migration->oldOptions;
$this->migrateSeparatorCharacter();
$this->setDefaultArticleType();
$this->migrateHomePageMeta();
$this->migrateTitleFormats();
$this->migrateDescriptionFormat();
$this->migrateNoindexSettings();
$this->migrateNofollowSettings();
$this->migratePostSeoColumns();
$this->migrateSocialUrls();
$this->migrateSchemaMarkupSettings();
$this->migrateHomePageKeywords();
$this->migrateDeprecatedAdvancedOptions();
$this->migrateRssContentSettings();
$this->migrateRedirectToParent();
$this->migrateDisabledPosts();
$this->migrateNoPaginationForCanonicalUrls();
$settings = [
'aiosp_admin_bar' => [ 'type' => 'boolean', 'newOption' => [ 'advanced', 'adminBarMenu' ] ],
'aiosp_google_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'aiosp_bing_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'aiosp_pinterest_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
'aiosp_yandex_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
'aiosp_baidu_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'baidu' ] ],
'aiosp_schema_site_represents' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'siteRepresents' ] ],
'aiosp_schema_organization_name' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'organizationName' ] ],
'aiosp_schema_person_manual_name' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'personName' ] ],
'aiosp_schema_organization_logo' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'organizationLogo' ] ],
'aiosp_schema_person_manual_image' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'personLogo' ] ],
'aiosp_togglekeywords' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'useKeywords' ] ],
'aiosp_use_categories' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'useCategoriesForMetaKeywords' ] ],
'aiosp_use_tags_as_keywords' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'useTagsForMetaKeywords' ] ],
'aiosp_dynamic_postspage_keywords' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'dynamicallyGenerateKeywords' ] ],
'aiosp_run_shortcodes' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'runShortcodes' ] ]
];
aioseo()->migration->helpers->mapOldToNew( $settings, aioseo()->migration->oldOptions );
}
/**
* Migrates the separator character.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSeparatorCharacter() {
aioseo()->options->searchAppearance->global->separator = '|';
}
/**
* Set the default posts schema type to Article.
*
* @since 4.0.0
*
* @return void
*/
private function setDefaultArticleType() {
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( 'post' ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->post->articleType = 'Article';
}
}
/**
* Migrates the homepage meta.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageMeta() {
$this->migrateHomePageTitle();
$this->migrateHomePageDescription();
// If the homepage is a static one, we should migrate the meta now.
$showOnFront = get_option( 'show_on_front' );
$pageOnFront = (int) get_option( 'page_on_front' );
if ( 'page' !== $showOnFront || ! $pageOnFront ) {
return;
}
$post = 'page' === $showOnFront && $pageOnFront ? get_post( $pageOnFront ) : '';
$aioseoPost = Models\Post::getPost( $post->ID );
$postMeta = aioseo()->core->db
->start( 'postmeta' . ' as pm' )
->select( 'pm.meta_key, pm.meta_value' )
->where( 'pm.post_id', $post->ID )
->whereRaw( "`pm`.`meta_key` LIKE '_aioseop_%'" )
->run()
->result();
$mappedMeta = [
'_aioseop_nofollow' => 'robots_nofollow',
'_aioseop_sitemap_priority' => 'priority',
'_aioseop_sitemap_frequency' => 'frequency',
'_aioseop_keywords' => 'keywords',
'_aioseop_opengraph_settings' => '',
];
$meta = [
'post_id' => $post->ID,
];
foreach ( $postMeta as $record ) {
$name = $record->meta_key;
$value = $record->meta_value;
if ( ! in_array( $name, array_keys( $mappedMeta ), true ) ) {
continue;
}
switch ( $name ) {
case '_aioseop_nofollow':
$meta[ $mappedMeta[ $name ] ] = ! empty( $value );
if ( ! empty( $value ) ) {
$meta['robots_default'] = false;
}
break;
case '_aioseop_keywords':
$meta[ $mappedMeta[ $name ] ] = aioseo()->migration->helpers->oldKeywordsToNewKeywords( $value );
break;
case '_aioseop_opengraph_settings':
$class = new Meta();
$meta += $class->convertOpenGraphMeta( $value );
// We'll deal with the OG title/description in the Social Meta migration class.
if ( isset( $meta['og_title'] ) ) {
unset( $meta['og_title'] );
}
if ( isset( $meta['og_description'] ) ) {
unset( $meta['og_description'] );
}
break;
default:
$meta[ $mappedMeta[ $name ] ] = aioseo()->helpers->sanitizeOption( $value );
break;
}
}
$aioseoPost->set( $meta );
$aioseoPost->save();
}
/**
* Migrates the homepage title.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageTitle() {
$showOnFront = get_option( 'show_on_front' );
$pageOnFront = (int) get_option( 'page_on_front' );
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : '';
$format = $this->oldOptions['aiosp_home_page_title_format'];
if ( 'posts' === $showOnFront ) {
$homePageTitle = $homePageTitle ? $homePageTitle : get_bloginfo( 'name' );
$title = empty( $format ) ? $homePageTitle : aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$title = aioseo()->migration->helpers->macrosToSmartTags( $title );
aioseo()->options->searchAppearance->global->siteTitle = aioseo()->helpers->sanitizeOption( $title );
return;
}
// Set the setting globally regardless of what happens below.
if ( ! empty( $homePageTitle ) ) {
$title = aioseo()->migration->helpers->macrosToSmartTags( aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format ) );
aioseo()->options->searchAppearance->global->siteTitle = aioseo()->helpers->sanitizeOption( $title );
}
$post = 'page' === $showOnFront && $pageOnFront ? get_post( $pageOnFront ) : '';
$metaTitle = get_post_meta( $post->ID, '_aioseop_title', true );
$homePageTitle = '';
if ( empty( $this->oldOptions['aiosp_use_static_home_info'] ) ) {
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : '#site_title';
$homePageTitle = ! empty( $metaTitle ) ? $metaTitle : $homePageTitle;
$homePageTitle = empty( $format ) ? $homePageTitle : aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$homePageTitle = aioseo()->migration->helpers->macrosToSmartTags( $homePageTitle );
} else {
if ( ! empty( $metaTitle ) ) {
$homePageTitle = empty( $format ) ? $metaTitle : aioseo()->helpers->pregReplace( '#%page_title%#', $metaTitle, $format );
$homePageTitle = aioseo()->migration->helpers->macrosToSmartTags( $homePageTitle );
}
}
$aioseoPost = Models\Post::getPost( $post->ID );
$aioseoPost->set( [
'post_id' => $post->ID,
'title' => aioseo()->helpers->sanitizeOption( $homePageTitle )
] );
$aioseoPost->save();
$this->maybeShowHomePageTitleNotice( $post );
}
/**
* Check if we should display a notice warning users that their homepage title may have changed.
*
* @since 4.0.0
*
* @param \WP_Post $post The post object.
* @return void
*/
private function maybeShowHomePageTitleNotice( $post ) {
$metaTitle = get_post_meta( $post->ID, '_aioseop_title', true );
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : '';
if (
empty( $this->oldOptions['aiosp_use_static_home_info'] ) &&
$metaTitle &&
( trim( $homePageTitle ) !== trim( $metaTitle ) )
) {
$this->showHomePageSettingsNotice();
}
}
/**
* Migrates the homepage description.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageDescription() {
$showOnFront = get_option( 'show_on_front' );
$pageOnFront = (int) get_option( 'page_on_front' );
$homePageDescription = ! empty( $this->oldOptions['aiosp_home_description'] ) ? $this->oldOptions['aiosp_home_description'] : '';
$format = $this->oldOptions['aiosp_description_format'];
if ( 'posts' === $showOnFront ) {
// If the description had the page_title macro, we want to replace it with the actual page title itself.
$homePageDescription = $homePageDescription ? $homePageDescription : get_bloginfo( 'description' );
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : get_bloginfo( 'name' );
$format = aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$description = empty( $format ) ? $homePageDescription : aioseo()->helpers->pregReplace( '#%description%#', $homePageDescription, $format );
$description = aioseo()->migration->helpers->macrosToSmartTags( $description );
aioseo()->options->searchAppearance->global->metaDescription = aioseo()->helpers->sanitizeOption( $description );
return;
}
// Set the setting globally regardless of what happens below.
if ( ! empty( $homePageDescription ) ) {
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : get_bloginfo( 'name' );
$format = aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$description = aioseo()->migration->helpers->macrosToSmartTags( aioseo()->helpers->pregReplace( '#%description%#', $homePageDescription, $format ) );
aioseo()->options->searchAppearance->global->metaDescription = aioseo()->helpers->sanitizeOption( $description );
}
$post = 'page' === $showOnFront && $pageOnFront ? get_post( $pageOnFront ) : '';
$metaDescription = get_post_meta( $post->ID, '_aioseop_description', true );
$homePageDescription = '';
if ( empty( $this->oldOptions['aiosp_use_static_home_info'] ) ) {
$homePageDescription = ! empty( $this->oldOptions['aiosp_home_description'] ) ? $this->oldOptions['aiosp_home_description'] : '';
$homePageDescription = ! empty( $metaDescription ) ? $metaDescription : $homePageDescription;
} else {
if ( ! empty( $metaDescription ) ) {
$homePageDescription = empty( $format ) ? $metaDescription : aioseo()->helpers->pregReplace( '#%description%#', $metaDescription, $format );
$homePageDescription = aioseo()->migration->helpers->macrosToSmartTags( $homePageDescription );
}
}
$homePageDescription = empty( $format ) ? $homePageDescription : aioseo()->helpers->pregReplace( '#(%description%|%page_title%)#', $homePageDescription, $format );
$homePageDescription = aioseo()->migration->helpers->macrosToSmartTags( $homePageDescription );
$aioseoPost = Models\Post::getPost( $post->ID );
$aioseoPost->set( [
'post_id' => $post->ID,
'description' => aioseo()->helpers->sanitizeOption( $homePageDescription )
] );
$aioseoPost->save();
$this->maybeShowHomePageDescriptionNotice( $post );
}
/**
* Check if we should display a notice warning users that their homepage title may have changed.
*
* @since 4.0.0
*
* @param \WP_Post $post The post object.
* @return void
*/
private function maybeShowHomePageDescriptionNotice( $post ) {
$metaDescription = get_post_meta( $post->ID, '_aioseop_description', true );
$homePageDescription = ! empty( $this->oldOptions['aiosp_home_description'] ) ? $this->oldOptions['aiosp_home_description'] : '';
if (
empty( $this->oldOptions['aiosp_use_static_home_info'] ) &&
$metaDescription &&
( trim( $homePageDescription ) !== trim( $metaDescription ) )
) {
$this->showHomePageSettingsNotice();
}
}
/**
* Shows the homepage settings notice.
*
* @since 4.0.0
*
* @return void
*/
private function showHomePageSettingsNotice() {
$notification = Models\Notification::getNotificationByName( 'v3-migration-homepage-settings' );
if ( $notification->notification_name ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'v3-migration-homepage-settings',
'title' => __( 'Review Your Homepage Title & Description', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - All in One SEO.
__( 'Due to a bug in the previous version of %1$s, your homepage title and description may have changed. Please take a minute to review your homepage settings to verify that they are correct.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
AIOSEO_PLUGIN_NAME
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Review Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://route#aioseo-search-appearance&aioseo-scroll=home-page-settings&aioseo-highlight=home-page-settings:global-settings',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Migrates the title formats.
*
* @since 4.0.0
*
* @return void
*/
private function migrateTitleFormats() {
if ( ! empty( $this->oldOptions['aiosp_archive_title_format'] ) ) {
$archives = array_keys( aioseo()->dynamicOptions->searchAppearance->archives->all() );
$format = aioseo()->helpers->sanitizeOption( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_archive_title_format'] ) );
foreach ( $archives as $archive ) {
aioseo()->dynamicOptions->searchAppearance->archives->$archive->title = $format;
}
}
$settings = [
'aiosp_post_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'post', 'title' ], 'dynamic' => true ],
'aiosp_page_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'page', 'title' ], 'dynamic' => true ],
'aiosp_attachment_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'attachment', 'title' ], 'dynamic' => true ],
'aiosp_category_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', 'category', 'title' ], 'dynamic' => true ],
'aiosp_tag_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', 'post_tag', 'title' ], 'dynamic' => true ],
'aiosp_date_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'title' ] ],
'aiosp_author_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'title' ] ],
'aiosp_search_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'search', 'title' ] ],
'aiosp_paged_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'advanced', 'pagedFormat' ] ]
];
foreach ( $this->oldOptions as $name => $value ) {
if (
! in_array( $name, array_keys( $settings ), true ) &&
preg_match( '#aiosp_(.*)_title_format#', (string) $name, $slug )
) {
if ( empty( $slug[1] ) ) {
continue;
}
$objectSlug = aioseo()->helpers->pregReplace( '#_tax#', '', $slug[1] );
if ( in_array( $objectSlug, aioseo()->helpers->getPublicPostTypes( true ), true ) ) {
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', $objectSlug, 'title' ], 'dynamic' => true ];
continue;
}
if ( in_array( $objectSlug, aioseo()->helpers->getPublicTaxonomies( true ), true ) ) {
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', $objectSlug, 'title' ], 'dynamic' => true ];
}
}
}
aioseo()->migration->helpers->mapOldToNew( $settings, $this->oldOptions, true );
// Check if any of the title formats were empty and register a notification if so.
$found = false;
foreach ( $settings as $k => $v ) {
if ( 'aiosp_home_page_title_format' === $k ) {
continue;
}
if ( isset( $this->oldOptions[ $k ] ) && empty( $this->oldOptions[ $k ] ) ) {
$found = true;
break;
}
}
if ( ! $found ) {
Models\Notification::deleteNotificationByName( 'v3-migration-title-formats-blank' );
return;
}
$notification = Models\Notification::getNotificationByName( 'v3-migration-title-formats-blank' );
if ( $notification->notification_name ) {
return;
}
$p1 = sprintf(
// Translators: 1 - The plugin short name ("AIOSEO"), 2 - The plugin short name ("AIOSEO"), 3 - Opening link tag, 4 - Closing link tag.
__( '%1$s migrated all your title formats, some of which were blank. If you were purposely using blank formats in the previous version of %2$s and want WordPress to handle your titles, you can safely dismiss this message. For more information, check out our documentation on %3$sblank title formats%4$s.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
AIOSEO_PLUGIN_SHORT_NAME,
AIOSEO_PLUGIN_SHORT_NAME,
'<a href="' . aioseo()->helpers->utmUrl( AIOSEO_MARKETING_URL . '/docs/blank-title-formats-detected', 'notifications-center', 'v3-migration-title-formats-blank' ) . '">',
'</a>'
);
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'v3-migration-title-formats-blank',
'title' => __( 'Blank Title Formats Detected', 'all-in-one-seo-pack' ),
'content' => $p1,
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Learn More', 'all-in-one-seo-pack' ),
'button1_action' => aioseo()->helpers->utmUrl( AIOSEO_MARKETING_URL . '/docs/blank-title-formats-detected', 'notifications-center', 'v3-migration-title-formats-blank' ),
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Migrates the description format.
*
* @since 4.0.0
*
* @return void
*/
private function migrateDescriptionFormat() {
if (
! empty( $this->oldOptions['aiosp_generate_descriptions'] ) &&
empty( $this->oldOptions['aiosp_skip_excerpt'] )
) {
foreach ( aioseo()->helpers->getPublicPostTypes() as $postType ) {
if ( empty( $postType['supports']['excerpt'] ) ) {
continue;
}
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType['name'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->{$postType['name']}->metaDescription = '#post_excerpt';
}
}
}
if (
empty( $this->oldOptions['aiosp_description_format'] ) ||
'%description%' === trim( $this->oldOptions['aiosp_description_format'] )
) {
return;
}
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
array_push( $deprecatedOptions, 'descriptionFormat' );
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
$format = aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_description_format'] );
aioseo()->options->deprecated->searchAppearance->global->descriptionFormat = aioseo()->helpers->sanitizeOption( $format );
}
/**
* Migrates the noindex settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateNoindexSettings() {
if ( ! isset( $this->oldOptions['aiosp_cpostnoindex'] ) && ! isset( $this->oldOptions['aiosp_tax_noindex'] ) ) {
return;
}
$noindexedPostTypes = is_array( $this->oldOptions['aiosp_cpostnoindex'] ) ? $this->oldOptions['aiosp_cpostnoindex'] : explode( ', ', $this->oldOptions['aiosp_cpostnoindex'] );
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $noindexedPostTypes ) as $postType ) {
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->postTypes->has( $postType ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->show = false;
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = true;
}
}
$noindexedTaxonomies = isset( $this->oldOptions['aiosp_tax_noindex'] ) ? (array) $this->oldOptions['aiosp_tax_noindex'] : [];
if ( ! empty( $this->oldOptions['aiosp_category_noindex'] ) ) {
$noindexedTaxonomies[] = 'category';
}
if ( ! empty( $this->oldOptions['aiosp_tags_noindex'] ) ) {
$noindexedTaxonomies[] = 'post_tag';
}
if ( ! empty( $noindexedTaxonomies ) ) {
foreach ( array_intersect( aioseo()->helpers->getPublicTaxonomies( true ), $noindexedTaxonomies ) as $taxonomy ) {
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->taxonomies->has( $taxonomy ) ) {
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->show = false;
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->default = false;
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->noindex = true;
}
}
}
if ( ! empty( $this->oldOptions['aiosp_archive_date_noindex'] ) ) {
aioseo()->options->searchAppearance->archives->date->show = false;
aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->default = false;
aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->noindex = true;
}
if ( ! empty( $this->oldOptions['aiosp_archive_author_noindex'] ) ) {
aioseo()->options->searchAppearance->archives->author->show = false;
aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->default = false;
aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->noindex = true;
}
if ( ! empty( $this->oldOptions['aiosp_search_noindex'] ) ) {
aioseo()->options->searchAppearance->archives->search->show = false;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->default = false;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->noindex = true;
} else {
// We need to do this as V4 will noindex the search page otherwise.
aioseo()->options->searchAppearance->archives->search->show = true;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->default = true;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->noindex = false;
}
if ( ! empty( $this->oldOptions['aiosp_paginated_noindex'] ) ) {
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->default = false;
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->noindexPaginated = true;
}
}
/**
* Migrates the nofollow settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateNofollowSettings() {
if ( ! empty( $this->oldOptions['aiosp_cpostnofollow'] ) ) {
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $this->oldOptions['aiosp_cpostnofollow'] ) as $postType ) {
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->postTypes->has( $postType ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->nofollow = true;
}
}
}
if ( ! empty( $this->oldOptions['aiosp_paginated_nofollow'] ) ) {
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->nofollowPaginated = true;
}
}
/**
* Migrates the post SEO columns.
*
* @since 4.0.0
*
* @return void
*/
private function migratePostSeoColumns() {
if ( ! isset( $this->oldOptions['aiosp_posttypecolumns'] ) ) {
return;
}
$publicPostTypes = aioseo()->helpers->getPublicPostTypes( true );
$postTypes = array_intersect( (array) $this->oldOptions['aiosp_posttypecolumns'], $publicPostTypes );
aioseo()->options->advanced->postTypes->included = array_values( $postTypes );
if ( count( $publicPostTypes ) !== count( $postTypes ) ) {
aioseo()->options->advanced->postTypes->all = false;
}
}
/**
* Migrates the schema social URLs.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSocialUrls() {
if ( ! empty( $this->oldOptions['modules']['aiosp_opengraph_options']['aiosp_opengraph_facebook_publisher'] ) ) {
aioseo()->options->social->profiles->urls->facebookPageUrl = esc_url( wp_strip_all_tags( $this->oldOptions['modules']['aiosp_opengraph_options']['aiosp_opengraph_facebook_publisher'] ) );
aioseo()->options->social->profiles->sameUsername->enable = false;
}
if ( empty( $this->oldOptions['aiosp_schema_social_profile_links'] ) ) {
return;
}
$socialUrls = aioseo()->helpers->pregReplace( '/\s/', '\r\n', $this->oldOptions['aiosp_schema_social_profile_links'] );
$socialUrls = array_filter( explode( '\r\n', $socialUrls ) );
if ( ! count( $socialUrls ) ) {
return;
}
$supportedNetworks = [
'facebook.com' => 'facebookPageUrl',
'twitter.com' => 'twitterUrl',
'instagram.com' => 'instagramUrl',
'tiktok.com' => 'tiktokUrl',
'pinterest.com' => 'pinterestUrl',
'youtube.com' => 'youtubeUrl',
'linkedin.com' => 'linkedinUrl',
'tumblr.com' => 'tumblrUrl',
'yelp.com' => 'yelpPageUrl',
'soundcloud.com' => 'soundCloudUrl',
'wikipedia.org' => 'wikipediaUrl',
'myspace.com' => 'myspaceUrl',
'wordpress.org' => 'wordpressUrl',
'bsky.app' => 'blueskyUrl',
'threads.net' => 'threadsUrl'
];
$found = false;
foreach ( $supportedNetworks as $url => $settingName ) {
$url = aioseo()->helpers->escapeRegex( $url );
foreach ( $socialUrls as $socialUrl ) {
if ( preg_match( "/.*$url.*/", (string) $socialUrl ) ) {
aioseo()->options->social->profiles->urls->$settingName = esc_url( wp_strip_all_tags( $socialUrl ) );
$found = true;
}
}
}
if ( $found ) {
aioseo()->options->social->profiles->sameUsername->enable = false;
}
}
/**
* Migrates the Schema Markup settings in the General Settings menu.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSchemaMarkupSettings() {
$this->migrateSchemaPhoneNumber();
if (
isset( $this->oldOptions['aiosp_schema_markup'] ) &&
empty( $this->oldOptions['aiosp_schema_markup'] )
) {
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
array_push( $deprecatedOptions, 'enableSchemaMarkup' );
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
aioseo()->options->deprecated->searchAppearance->global->schema->enableSchemaMarkup = false;
}
if ( ! empty( $this->oldOptions['aiosp_schema_person_user'] ) ) {
if ( -1 === (int) $this->oldOptions['aiosp_schema_person_user'] ) {
aioseo()->options->searchAppearance->global->schema->person = 'manual';
} else {
aioseo()->options->searchAppearance->global->schema->person = intval( $this->oldOptions['aiosp_schema_person_user'] );
}
}
}
/**
* Migrates the schema phone number.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSchemaPhoneNumber() {
if ( empty( $this->oldOptions['aiosp_schema_phone_number'] ) ) {
return;
}
$phoneNumber = aioseo()->helpers->sanitizeOption( $this->oldOptions['aiosp_schema_phone_number'] );
if ( ! preg_match( '#\+\d+#', (string) $phoneNumber ) ) {
$notification = Models\Notification::getNotificationByName( 'v3-migration-schema-number' );
if ( $notification->notification_name ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'v3-migration-schema-number',
'title' => __( 'Invalid Phone Number for Knowledge Graph', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The phone number.
__( 'The phone number that you previously entered for your Knowledge Graph schema markup is invalid. As it needs to be internationally formatted, please enter it (%1$s) again with the country code, e.g. +1 (555) 555-1234.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
"<strong>$phoneNumber</strong>"
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://route#aioseo-search-appearance&aioseo-scroll=schema-graph-phone&aioseo-highlight=schema-graph-phone:global-settings',
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/v3-migration-schema-number-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
return;
}
aioseo()->options->searchAppearance->global->schema->phone = $phoneNumber;
}
/**
* Migrates the homepage keywords.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageKeywords() {
if ( ! empty( $this->oldOptions['aiosp_home_keywords'] ) ) {
aioseo()->options->searchAppearance->global->keywords = aioseo()->migration->helpers->oldKeywordsToNewKeywords( $this->oldOptions['aiosp_home_keywords'] );
}
}
/**
* Migrates the deprecated V3 advanced General Settings options.
*
* @since 4.0.0
*
* @return void
*/
private function migrateDeprecatedAdvancedOptions() {
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
if ( empty( $this->oldOptions['aiosp_generate_descriptions'] ) ) {
array_push( $deprecatedOptions, 'autogenerateDescriptions' );
aioseo()->options->deprecated->searchAppearance->advanced->autogenerateDescriptions = false;
} else {
if ( ! empty( $this->oldOptions['aiosp_skip_excerpt'] ) ) {
array_push( $deprecatedOptions, 'useContentForAutogeneratedDescriptions' );
aioseo()->options->deprecated->searchAppearance->advanced->useContentForAutogeneratedDescriptions = true;
}
}
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
}
/**
* Migrates the RSS content settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRssContentSettings() {
if ( isset( $this->oldOptions['aiosp_rss_content_before'] ) ) {
aioseo()->options->rssContent->before = esc_html( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_rss_content_before'] ) );
}
if ( isset( $this->oldOptions['aiosp_rss_content_after'] ) ) {
aioseo()->options->rssContent->after = esc_html( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_rss_content_after'] ) );
}
}
/**
* Migrates the Redirect Attachment to Parent setting.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRedirectToParent() {
if ( isset( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
if ( ! empty( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
} else {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
}
}
}
/**
* Migrates the excluded posts.
*
* @since 4.0.0
*
* @return void
*/
private function migrateDisabledPosts() {
if ( empty( $this->oldOptions['aiosp_ex_pages'] ) ) {
return;
}
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
if ( ! in_array( 'excludePosts', $deprecatedOptions, true ) ) {
array_push( $deprecatedOptions, 'excludePosts' );
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
}
$excludedPosts = aioseo()->options->deprecated->searchAppearance->advanced->excludePosts;
$pages = explode( ',', $this->oldOptions['aiosp_ex_pages'] );
if ( count( $pages ) ) {
foreach ( $pages as $page ) {
$page = trim( $page );
$id = intval( $page );
if ( ! $id ) {
$post = get_page_by_path( $page, OBJECT, aioseo()->helpers->getPublicPostTypes( true ) );
if ( $post && is_object( $post ) ) {
$id = $post->ID;
}
}
if ( $id ) {
$post = get_post( $id );
if ( ! is_object( $post ) ) {
continue;
}
$excludedPost = new \stdClass();
$excludedPost->value = $id;
$excludedPost->type = $post->post_type;
$excludedPost->label = $post->post_title;
$excludedPost->link = get_permalink( $id );
array_push( $excludedPosts, wp_json_encode( $excludedPost ) );
}
}
}
aioseo()->options->deprecated->searchAppearance->advanced->excludePosts = $excludedPosts;
}
/**
* Migrates the deprecated "No Pagination for Canonical URLs" setting.
*
* @since 4.5.9
*
* @return void
*/
private function migrateNoPaginationForCanonicalUrls() {
if ( empty( $this->oldOptions['aiosp_no_paged_canonical_links'] ) ) {
return;
}
$deprecatedOptions = aioseo()->internalOptions->deprecatedOptions;
if ( ! in_array( 'noPaginationForCanonical', $deprecatedOptions, true ) ) {
$deprecatedOptions[] = 'noPaginationForCanonical';
aioseo()->internalOptions->deprecatedOptions = $deprecatedOptions;
}
aioseo()->options->deprecated->searchAppearance->advanced->noPaginationForCanonical = true;
}
} dev/wp-content/plugins/all-in-one-seo-pack/app/Common/ImportExport/SeoPress/GeneralSettings.php 0000644 00000010307 15114107006 0031574 0 ustar 00 home/xbodynamge <?php
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings.
*
* @since 4.1.4
*/
class GeneralSettings {
/**
* List of options.
*
* @since 4.2.7
*
* @var array
*/
private $options = [];
/**
* List of our access control roles.
*
* @since 4.2.7
*
* @var array
*/
private $roles = [];
/**
* Class constructor.
*
* @since 4.1.4
*/
public function __construct() {
$this->options = get_option( 'seopress_advanced_option_name' );
if ( empty( $this->options ) ) {
return;
}
$this->roles = aioseo()->access->getRoles();
$this->migrateBlockMetaboxRoles();
$this->migrateBlockContentAnalysisRoles();
$this->migrateAttachmentRedirects();
$settings = [
'seopress_advanced_advanced_google' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'seopress_advanced_advanced_bing' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'seopress_advanced_advanced_pinterest' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
'seopress_advanced_advanced_yandex' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
];
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
}
/**
* Migrates Block AIOSEO metabox setting.
*
* @since 4.1.4
*
* @return void
*/
private function migrateBlockMetaboxRoles() {
$seoPressRoles = ! empty( $this->options['seopress_advanced_security_metaboxe_role'] ) ? $this->options['seopress_advanced_security_metaboxe_role'] : '';
if ( empty( $seoPressRoles ) ) {
return;
}
$roleSettings = [ 'useDefault', 'pageAnalysis', 'pageGeneralSettings', 'pageSocialSettings', 'pageSchemaSettings', 'pageAdvancedSettings' ];
foreach ( $seoPressRoles as $wpRole => $value ) {
$role = $this->roles[ $wpRole ];
if ( empty( $role ) || aioseo()->access->isAdmin( $role ) ) {
continue;
}
if ( aioseo()->options->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->options->accessControl->$role->$setting = false;
}
} elseif ( aioseo()->dynamicOptions->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->dynamicOptions->accessControl->$role->$setting = false;
}
}
}
}
/**
* Migrates Block Content analysis metabox setting.
*
* @since 4.1.4
*
* @return void
*/
private function migrateBlockContentAnalysisRoles() {
$seoPressRoles = ! empty( $this->options['seopress_advanced_security_metaboxe_ca_role'] ) ? $this->options['seopress_advanced_security_metaboxe_ca_role'] : '';
if ( empty( $seoPressRoles ) ) {
return;
}
$roleSettings = [ 'useDefault', 'pageAnalysis' ];
foreach ( $seoPressRoles as $wpRole => $value ) {
$role = $this->roles[ $wpRole ];
if ( empty( $role ) || aioseo()->access->isAdmin( $role ) ) {
continue;
}
if ( aioseo()->options->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->options->accessControl->$role->$setting = false;
}
} elseif ( aioseo()->dynamicOptions->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->dynamicOptions->accessControl->$role->$setting = false;
}
}
}
}
/**
* Migrates redirect attachment pages settings.
*
* @since 4.1.4
*
* @return void
*/
private function migrateAttachmentRedirects() {
if ( ! empty( $this->options['seopress_advanced_advanced_attachments'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
}
if ( ! empty( $this->options['seopress_advanced_advanced_attachments_file'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment';
}
if ( empty( $this->options['seopress_advanced_advanced_attachments'] ) && empty( $this->options['seopress_advanced_advanced_attachments_file'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
}
}
} dev/wp-content/plugins/all-in-one-seo-pack/app/Common/ImportExport/RankMath/GeneralSettings.php 0000644 00000005777 15114107136 0031561 0 ustar 00 home/xbodynamge <?php
namespace AIOSEO\Plugin\Common\ImportExport\RankMath;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings.
*
* @since 4.0.0
*/
class GeneralSettings {
/**
* List of options.
*
* @since 4.2.7
*
* @var array
*/
private $options = [];
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->options = get_option( 'rank-math-options-general' );
if ( empty( $this->options ) ) {
return;
}
$this->isTruSeoDisabled();
$this->migrateRedirectAttachments();
$this->migrateStripCategoryBase();
$this->migrateRssContentSettings();
$settings = [
'google_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'bing_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'yandex_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
'baidu_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'baidu' ] ],
'pinterest_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
];
aioseo()->importExport->rankMath->helpers->mapOldToNew( $settings, $this->options );
}
/**
* Checks whether TruSEO should be disabled.
*
* @since 4.0.0
*
* @return void
*/
private function isTruSeoDisabled() {
if ( ! empty( $this->options['frontend_seo_score'] ) ) {
aioseo()->options->advanced->truSeo = 'on' === $this->options['frontend_seo_score'];
}
}
/**
* Migrates the Redirect Attachments setting.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRedirectAttachments() {
if ( isset( $this->options['attachment_redirect_urls'] ) ) {
if ( 'on' === $this->options['attachment_redirect_urls'] ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
} else {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
}
}
}
/**
* Migrates the Strip Category Base setting.
*
* @since 4.2.0
*
* @return void
*/
private function migrateStripCategoryBase() {
if ( isset( $this->options['strip_category_base'] ) ) {
aioseo()->options->searchAppearance->advanced->removeCategoryBase = 'on' === $this->options['strip_category_base'] ? true : false;
}
}
/**
* Migrates the RSS content settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRssContentSettings() {
if ( isset( $this->options['rss_before_content'] ) ) {
aioseo()->options->rssContent->before = esc_html( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $this->options['rss_before_content'] ) );
}
if ( isset( $this->options['rss_after_content'] ) ) {
aioseo()->options->rssContent->after = esc_html( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $this->options['rss_after_content'] ) );
}
}
} dev/wp-content/plugins/all-in-one-seo-pack/app/Common/ImportExport/YoastSeo/GeneralSettings.php 0000644 00000002233 15114107367 0031610 0 ustar 00 home/xbodynamge <?php
namespace AIOSEO\Plugin\Common\ImportExport\YoastSeo;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings.
*
* @since 4.0.0
*/
class GeneralSettings {
/**
* List of options.
*
* @since 4.2.7
*
* @var array
*/
private $options = [];
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->options = get_option( 'wpseo' );
if ( empty( $this->options ) ) {
return;
}
$settings = [
'googleverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'msverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'yandexverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
'baiduverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'baidu' ] ],
'enable_xml_sitemap' => [ 'type' => 'boolean', 'newOption' => [ 'sitemap', 'general', 'enable' ] ]
];
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options );
}
} home/xbodynamge/dev/wp-content/plugins/all-in-one-seo-pack/app/Common/Migration/GeneralSettings.php 0000644 00000103572 15114317447 0027410 0 ustar 00 <?php
namespace AIOSEO\Plugin\Common\Migration;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings from V3.
*
* @since 4.0.0
*/
class GeneralSettings {
/**
* The old V3 options.
*
* @since 4.0.0
*
* @var array
*/
protected $oldOptions = [];
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->oldOptions = aioseo()->migration->oldOptions;
$this->migrateSeparatorCharacter();
$this->setDefaultArticleType();
$this->migrateHomePageMeta();
$this->migrateTitleFormats();
$this->migrateDescriptionFormat();
$this->migrateNoindexSettings();
$this->migrateNofollowSettings();
$this->migratePostSeoColumns();
$this->migrateSocialUrls();
$this->migrateSchemaMarkupSettings();
$this->migrateHomePageKeywords();
$this->migrateDeprecatedAdvancedOptions();
$this->migrateRssContentSettings();
$this->migrateRedirectToParent();
$this->migrateDisabledPosts();
$this->migrateNoPaginationForCanonicalUrls();
$settings = [
'aiosp_admin_bar' => [ 'type' => 'boolean', 'newOption' => [ 'advanced', 'adminBarMenu' ] ],
'aiosp_google_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'aiosp_bing_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'aiosp_pinterest_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
'aiosp_yandex_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
'aiosp_baidu_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'baidu' ] ],
'aiosp_schema_site_represents' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'siteRepresents' ] ],
'aiosp_schema_organization_name' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'organizationName' ] ],
'aiosp_schema_person_manual_name' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'personName' ] ],
'aiosp_schema_organization_logo' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'organizationLogo' ] ],
'aiosp_schema_person_manual_image' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'personLogo' ] ],
'aiosp_togglekeywords' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'useKeywords' ] ],
'aiosp_use_categories' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'useCategoriesForMetaKeywords' ] ],
'aiosp_use_tags_as_keywords' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'useTagsForMetaKeywords' ] ],
'aiosp_dynamic_postspage_keywords' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'dynamicallyGenerateKeywords' ] ],
'aiosp_run_shortcodes' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'runShortcodes' ] ]
];
aioseo()->migration->helpers->mapOldToNew( $settings, aioseo()->migration->oldOptions );
}
/**
* Migrates the separator character.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSeparatorCharacter() {
aioseo()->options->searchAppearance->global->separator = '|';
}
/**
* Set the default posts schema type to Article.
*
* @since 4.0.0
*
* @return void
*/
private function setDefaultArticleType() {
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( 'post' ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->post->articleType = 'Article';
}
}
/**
* Migrates the homepage meta.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageMeta() {
$this->migrateHomePageTitle();
$this->migrateHomePageDescription();
// If the homepage is a static one, we should migrate the meta now.
$showOnFront = get_option( 'show_on_front' );
$pageOnFront = (int) get_option( 'page_on_front' );
if ( 'page' !== $showOnFront || ! $pageOnFront ) {
return;
}
$post = 'page' === $showOnFront && $pageOnFront ? get_post( $pageOnFront ) : '';
$aioseoPost = Models\Post::getPost( $post->ID );
$postMeta = aioseo()->core->db
->start( 'postmeta' . ' as pm' )
->select( 'pm.meta_key, pm.meta_value' )
->where( 'pm.post_id', $post->ID )
->whereRaw( "`pm`.`meta_key` LIKE '_aioseop_%'" )
->run()
->result();
$mappedMeta = [
'_aioseop_nofollow' => 'robots_nofollow',
'_aioseop_sitemap_priority' => 'priority',
'_aioseop_sitemap_frequency' => 'frequency',
'_aioseop_keywords' => 'keywords',
'_aioseop_opengraph_settings' => '',
];
$meta = [
'post_id' => $post->ID,
];
foreach ( $postMeta as $record ) {
$name = $record->meta_key;
$value = $record->meta_value;
if ( ! in_array( $name, array_keys( $mappedMeta ), true ) ) {
continue;
}
switch ( $name ) {
case '_aioseop_nofollow':
$meta[ $mappedMeta[ $name ] ] = ! empty( $value );
if ( ! empty( $value ) ) {
$meta['robots_default'] = false;
}
break;
case '_aioseop_keywords':
$meta[ $mappedMeta[ $name ] ] = aioseo()->migration->helpers->oldKeywordsToNewKeywords( $value );
break;
case '_aioseop_opengraph_settings':
$class = new Meta();
$meta += $class->convertOpenGraphMeta( $value );
// We'll deal with the OG title/description in the Social Meta migration class.
if ( isset( $meta['og_title'] ) ) {
unset( $meta['og_title'] );
}
if ( isset( $meta['og_description'] ) ) {
unset( $meta['og_description'] );
}
break;
default:
$meta[ $mappedMeta[ $name ] ] = aioseo()->helpers->sanitizeOption( $value );
break;
}
}
$aioseoPost->set( $meta );
$aioseoPost->save();
}
/**
* Migrates the homepage title.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageTitle() {
$showOnFront = get_option( 'show_on_front' );
$pageOnFront = (int) get_option( 'page_on_front' );
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : '';
$format = $this->oldOptions['aiosp_home_page_title_format'];
if ( 'posts' === $showOnFront ) {
$homePageTitle = $homePageTitle ? $homePageTitle : get_bloginfo( 'name' );
$title = empty( $format ) ? $homePageTitle : aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$title = aioseo()->migration->helpers->macrosToSmartTags( $title );
aioseo()->options->searchAppearance->global->siteTitle = aioseo()->helpers->sanitizeOption( $title );
return;
}
// Set the setting globally regardless of what happens below.
if ( ! empty( $homePageTitle ) ) {
$title = aioseo()->migration->helpers->macrosToSmartTags( aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format ) );
aioseo()->options->searchAppearance->global->siteTitle = aioseo()->helpers->sanitizeOption( $title );
}
$post = 'page' === $showOnFront && $pageOnFront ? get_post( $pageOnFront ) : '';
$metaTitle = get_post_meta( $post->ID, '_aioseop_title', true );
$homePageTitle = '';
if ( empty( $this->oldOptions['aiosp_use_static_home_info'] ) ) {
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : '#site_title';
$homePageTitle = ! empty( $metaTitle ) ? $metaTitle : $homePageTitle;
$homePageTitle = empty( $format ) ? $homePageTitle : aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$homePageTitle = aioseo()->migration->helpers->macrosToSmartTags( $homePageTitle );
} else {
if ( ! empty( $metaTitle ) ) {
$homePageTitle = empty( $format ) ? $metaTitle : aioseo()->helpers->pregReplace( '#%page_title%#', $metaTitle, $format );
$homePageTitle = aioseo()->migration->helpers->macrosToSmartTags( $homePageTitle );
}
}
$aioseoPost = Models\Post::getPost( $post->ID );
$aioseoPost->set( [
'post_id' => $post->ID,
'title' => aioseo()->helpers->sanitizeOption( $homePageTitle )
] );
$aioseoPost->save();
$this->maybeShowHomePageTitleNotice( $post );
}
/**
* Check if we should display a notice warning users that their homepage title may have changed.
*
* @since 4.0.0
*
* @param \WP_Post $post The post object.
* @return void
*/
private function maybeShowHomePageTitleNotice( $post ) {
$metaTitle = get_post_meta( $post->ID, '_aioseop_title', true );
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : '';
if (
empty( $this->oldOptions['aiosp_use_static_home_info'] ) &&
$metaTitle &&
( trim( $homePageTitle ) !== trim( $metaTitle ) )
) {
$this->showHomePageSettingsNotice();
}
}
/**
* Migrates the homepage description.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageDescription() {
$showOnFront = get_option( 'show_on_front' );
$pageOnFront = (int) get_option( 'page_on_front' );
$homePageDescription = ! empty( $this->oldOptions['aiosp_home_description'] ) ? $this->oldOptions['aiosp_home_description'] : '';
$format = $this->oldOptions['aiosp_description_format'];
if ( 'posts' === $showOnFront ) {
// If the description had the page_title macro, we want to replace it with the actual page title itself.
$homePageDescription = $homePageDescription ? $homePageDescription : get_bloginfo( 'description' );
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : get_bloginfo( 'name' );
$format = aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$description = empty( $format ) ? $homePageDescription : aioseo()->helpers->pregReplace( '#%description%#', $homePageDescription, $format );
$description = aioseo()->migration->helpers->macrosToSmartTags( $description );
aioseo()->options->searchAppearance->global->metaDescription = aioseo()->helpers->sanitizeOption( $description );
return;
}
// Set the setting globally regardless of what happens below.
if ( ! empty( $homePageDescription ) ) {
$homePageTitle = ! empty( $this->oldOptions['aiosp_home_title'] ) ? $this->oldOptions['aiosp_home_title'] : get_bloginfo( 'name' );
$format = aioseo()->helpers->pregReplace( '#%page_title%#', $homePageTitle, $format );
$description = aioseo()->migration->helpers->macrosToSmartTags( aioseo()->helpers->pregReplace( '#%description%#', $homePageDescription, $format ) );
aioseo()->options->searchAppearance->global->metaDescription = aioseo()->helpers->sanitizeOption( $description );
}
$post = 'page' === $showOnFront && $pageOnFront ? get_post( $pageOnFront ) : '';
$metaDescription = get_post_meta( $post->ID, '_aioseop_description', true );
$homePageDescription = '';
if ( empty( $this->oldOptions['aiosp_use_static_home_info'] ) ) {
$homePageDescription = ! empty( $this->oldOptions['aiosp_home_description'] ) ? $this->oldOptions['aiosp_home_description'] : '';
$homePageDescription = ! empty( $metaDescription ) ? $metaDescription : $homePageDescription;
} else {
if ( ! empty( $metaDescription ) ) {
$homePageDescription = empty( $format ) ? $metaDescription : aioseo()->helpers->pregReplace( '#%description%#', $metaDescription, $format );
$homePageDescription = aioseo()->migration->helpers->macrosToSmartTags( $homePageDescription );
}
}
$homePageDescription = empty( $format ) ? $homePageDescription : aioseo()->helpers->pregReplace( '#(%description%|%page_title%)#', $homePageDescription, $format );
$homePageDescription = aioseo()->migration->helpers->macrosToSmartTags( $homePageDescription );
$aioseoPost = Models\Post::getPost( $post->ID );
$aioseoPost->set( [
'post_id' => $post->ID,
'description' => aioseo()->helpers->sanitizeOption( $homePageDescription )
] );
$aioseoPost->save();
$this->maybeShowHomePageDescriptionNotice( $post );
}
/**
* Check if we should display a notice warning users that their homepage title may have changed.
*
* @since 4.0.0
*
* @param \WP_Post $post The post object.
* @return void
*/
private function maybeShowHomePageDescriptionNotice( $post ) {
$metaDescription = get_post_meta( $post->ID, '_aioseop_description', true );
$homePageDescription = ! empty( $this->oldOptions['aiosp_home_description'] ) ? $this->oldOptions['aiosp_home_description'] : '';
if (
empty( $this->oldOptions['aiosp_use_static_home_info'] ) &&
$metaDescription &&
( trim( $homePageDescription ) !== trim( $metaDescription ) )
) {
$this->showHomePageSettingsNotice();
}
}
/**
* Shows the homepage settings notice.
*
* @since 4.0.0
*
* @return void
*/
private function showHomePageSettingsNotice() {
$notification = Models\Notification::getNotificationByName( 'v3-migration-homepage-settings' );
if ( $notification->notification_name ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'v3-migration-homepage-settings',
'title' => __( 'Review Your Homepage Title & Description', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - All in One SEO.
__( 'Due to a bug in the previous version of %1$s, your homepage title and description may have changed. Please take a minute to review your homepage settings to verify that they are correct.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
AIOSEO_PLUGIN_NAME
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Review Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://route#aioseo-search-appearance&aioseo-scroll=home-page-settings&aioseo-highlight=home-page-settings:global-settings',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Migrates the title formats.
*
* @since 4.0.0
*
* @return void
*/
private function migrateTitleFormats() {
if ( ! empty( $this->oldOptions['aiosp_archive_title_format'] ) ) {
$archives = array_keys( aioseo()->dynamicOptions->searchAppearance->archives->all() );
$format = aioseo()->helpers->sanitizeOption( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_archive_title_format'] ) );
foreach ( $archives as $archive ) {
aioseo()->dynamicOptions->searchAppearance->archives->$archive->title = $format;
}
}
$settings = [
'aiosp_post_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'post', 'title' ], 'dynamic' => true ],
'aiosp_page_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'page', 'title' ], 'dynamic' => true ],
'aiosp_attachment_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'attachment', 'title' ], 'dynamic' => true ],
'aiosp_category_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', 'category', 'title' ], 'dynamic' => true ],
'aiosp_tag_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', 'post_tag', 'title' ], 'dynamic' => true ],
'aiosp_date_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'title' ] ],
'aiosp_author_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'title' ] ],
'aiosp_search_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'search', 'title' ] ],
'aiosp_paged_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'advanced', 'pagedFormat' ] ]
];
foreach ( $this->oldOptions as $name => $value ) {
if (
! in_array( $name, array_keys( $settings ), true ) &&
preg_match( '#aiosp_(.*)_title_format#', (string) $name, $slug )
) {
if ( empty( $slug[1] ) ) {
continue;
}
$objectSlug = aioseo()->helpers->pregReplace( '#_tax#', '', $slug[1] );
if ( in_array( $objectSlug, aioseo()->helpers->getPublicPostTypes( true ), true ) ) {
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', $objectSlug, 'title' ], 'dynamic' => true ];
continue;
}
if ( in_array( $objectSlug, aioseo()->helpers->getPublicTaxonomies( true ), true ) ) {
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', $objectSlug, 'title' ], 'dynamic' => true ];
}
}
}
aioseo()->migration->helpers->mapOldToNew( $settings, $this->oldOptions, true );
// Check if any of the title formats were empty and register a notification if so.
$found = false;
foreach ( $settings as $k => $v ) {
if ( 'aiosp_home_page_title_format' === $k ) {
continue;
}
if ( isset( $this->oldOptions[ $k ] ) && empty( $this->oldOptions[ $k ] ) ) {
$found = true;
break;
}
}
if ( ! $found ) {
Models\Notification::deleteNotificationByName( 'v3-migration-title-formats-blank' );
return;
}
$notification = Models\Notification::getNotificationByName( 'v3-migration-title-formats-blank' );
if ( $notification->notification_name ) {
return;
}
$p1 = sprintf(
// Translators: 1 - The plugin short name ("AIOSEO"), 2 - The plugin short name ("AIOSEO"), 3 - Opening link tag, 4 - Closing link tag.
__( '%1$s migrated all your title formats, some of which were blank. If you were purposely using blank formats in the previous version of %2$s and want WordPress to handle your titles, you can safely dismiss this message. For more information, check out our documentation on %3$sblank title formats%4$s.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
AIOSEO_PLUGIN_SHORT_NAME,
AIOSEO_PLUGIN_SHORT_NAME,
'<a href="' . aioseo()->helpers->utmUrl( AIOSEO_MARKETING_URL . '/docs/blank-title-formats-detected', 'notifications-center', 'v3-migration-title-formats-blank' ) . '">',
'</a>'
);
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'v3-migration-title-formats-blank',
'title' => __( 'Blank Title Formats Detected', 'all-in-one-seo-pack' ),
'content' => $p1,
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Learn More', 'all-in-one-seo-pack' ),
'button1_action' => aioseo()->helpers->utmUrl( AIOSEO_MARKETING_URL . '/docs/blank-title-formats-detected', 'notifications-center', 'v3-migration-title-formats-blank' ),
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Migrates the description format.
*
* @since 4.0.0
*
* @return void
*/
private function migrateDescriptionFormat() {
if (
! empty( $this->oldOptions['aiosp_generate_descriptions'] ) &&
empty( $this->oldOptions['aiosp_skip_excerpt'] )
) {
foreach ( aioseo()->helpers->getPublicPostTypes() as $postType ) {
if ( empty( $postType['supports']['excerpt'] ) ) {
continue;
}
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType['name'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->{$postType['name']}->metaDescription = '#post_excerpt';
}
}
}
if (
empty( $this->oldOptions['aiosp_description_format'] ) ||
'%description%' === trim( $this->oldOptions['aiosp_description_format'] )
) {
return;
}
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
array_push( $deprecatedOptions, 'descriptionFormat' );
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
$format = aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_description_format'] );
aioseo()->options->deprecated->searchAppearance->global->descriptionFormat = aioseo()->helpers->sanitizeOption( $format );
}
/**
* Migrates the noindex settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateNoindexSettings() {
if ( ! isset( $this->oldOptions['aiosp_cpostnoindex'] ) && ! isset( $this->oldOptions['aiosp_tax_noindex'] ) ) {
return;
}
$noindexedPostTypes = is_array( $this->oldOptions['aiosp_cpostnoindex'] ) ? $this->oldOptions['aiosp_cpostnoindex'] : explode( ', ', $this->oldOptions['aiosp_cpostnoindex'] );
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $noindexedPostTypes ) as $postType ) {
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->postTypes->has( $postType ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->show = false;
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = true;
}
}
$noindexedTaxonomies = isset( $this->oldOptions['aiosp_tax_noindex'] ) ? (array) $this->oldOptions['aiosp_tax_noindex'] : [];
if ( ! empty( $this->oldOptions['aiosp_category_noindex'] ) ) {
$noindexedTaxonomies[] = 'category';
}
if ( ! empty( $this->oldOptions['aiosp_tags_noindex'] ) ) {
$noindexedTaxonomies[] = 'post_tag';
}
if ( ! empty( $noindexedTaxonomies ) ) {
foreach ( array_intersect( aioseo()->helpers->getPublicTaxonomies( true ), $noindexedTaxonomies ) as $taxonomy ) {
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->taxonomies->has( $taxonomy ) ) {
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->show = false;
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->default = false;
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->noindex = true;
}
}
}
if ( ! empty( $this->oldOptions['aiosp_archive_date_noindex'] ) ) {
aioseo()->options->searchAppearance->archives->date->show = false;
aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->default = false;
aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->noindex = true;
}
if ( ! empty( $this->oldOptions['aiosp_archive_author_noindex'] ) ) {
aioseo()->options->searchAppearance->archives->author->show = false;
aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->default = false;
aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->noindex = true;
}
if ( ! empty( $this->oldOptions['aiosp_search_noindex'] ) ) {
aioseo()->options->searchAppearance->archives->search->show = false;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->default = false;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->noindex = true;
} else {
// We need to do this as V4 will noindex the search page otherwise.
aioseo()->options->searchAppearance->archives->search->show = true;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->default = true;
aioseo()->options->searchAppearance->archives->search->advanced->robotsMeta->noindex = false;
}
if ( ! empty( $this->oldOptions['aiosp_paginated_noindex'] ) ) {
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->default = false;
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->noindexPaginated = true;
}
}
/**
* Migrates the nofollow settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateNofollowSettings() {
if ( ! empty( $this->oldOptions['aiosp_cpostnofollow'] ) ) {
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $this->oldOptions['aiosp_cpostnofollow'] ) as $postType ) {
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->postTypes->has( $postType ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->nofollow = true;
}
}
}
if ( ! empty( $this->oldOptions['aiosp_paginated_nofollow'] ) ) {
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->nofollowPaginated = true;
}
}
/**
* Migrates the post SEO columns.
*
* @since 4.0.0
*
* @return void
*/
private function migratePostSeoColumns() {
if ( ! isset( $this->oldOptions['aiosp_posttypecolumns'] ) ) {
return;
}
$publicPostTypes = aioseo()->helpers->getPublicPostTypes( true );
$postTypes = array_intersect( (array) $this->oldOptions['aiosp_posttypecolumns'], $publicPostTypes );
aioseo()->options->advanced->postTypes->included = array_values( $postTypes );
if ( count( $publicPostTypes ) !== count( $postTypes ) ) {
aioseo()->options->advanced->postTypes->all = false;
}
}
/**
* Migrates the schema social URLs.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSocialUrls() {
if ( ! empty( $this->oldOptions['modules']['aiosp_opengraph_options']['aiosp_opengraph_facebook_publisher'] ) ) {
aioseo()->options->social->profiles->urls->facebookPageUrl = esc_url( wp_strip_all_tags( $this->oldOptions['modules']['aiosp_opengraph_options']['aiosp_opengraph_facebook_publisher'] ) );
aioseo()->options->social->profiles->sameUsername->enable = false;
}
if ( empty( $this->oldOptions['aiosp_schema_social_profile_links'] ) ) {
return;
}
$socialUrls = aioseo()->helpers->pregReplace( '/\s/', '\r\n', $this->oldOptions['aiosp_schema_social_profile_links'] );
$socialUrls = array_filter( explode( '\r\n', $socialUrls ) );
if ( ! count( $socialUrls ) ) {
return;
}
$supportedNetworks = [
'facebook.com' => 'facebookPageUrl',
'twitter.com' => 'twitterUrl',
'instagram.com' => 'instagramUrl',
'tiktok.com' => 'tiktokUrl',
'pinterest.com' => 'pinterestUrl',
'youtube.com' => 'youtubeUrl',
'linkedin.com' => 'linkedinUrl',
'tumblr.com' => 'tumblrUrl',
'yelp.com' => 'yelpPageUrl',
'soundcloud.com' => 'soundCloudUrl',
'wikipedia.org' => 'wikipediaUrl',
'myspace.com' => 'myspaceUrl',
'wordpress.org' => 'wordpressUrl',
'bsky.app' => 'blueskyUrl',
'threads.net' => 'threadsUrl'
];
$found = false;
foreach ( $supportedNetworks as $url => $settingName ) {
$url = aioseo()->helpers->escapeRegex( $url );
foreach ( $socialUrls as $socialUrl ) {
if ( preg_match( "/.*$url.*/", (string) $socialUrl ) ) {
aioseo()->options->social->profiles->urls->$settingName = esc_url( wp_strip_all_tags( $socialUrl ) );
$found = true;
}
}
}
if ( $found ) {
aioseo()->options->social->profiles->sameUsername->enable = false;
}
}
/**
* Migrates the Schema Markup settings in the General Settings menu.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSchemaMarkupSettings() {
$this->migrateSchemaPhoneNumber();
if (
isset( $this->oldOptions['aiosp_schema_markup'] ) &&
empty( $this->oldOptions['aiosp_schema_markup'] )
) {
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
array_push( $deprecatedOptions, 'enableSchemaMarkup' );
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
aioseo()->options->deprecated->searchAppearance->global->schema->enableSchemaMarkup = false;
}
if ( ! empty( $this->oldOptions['aiosp_schema_person_user'] ) ) {
if ( -1 === (int) $this->oldOptions['aiosp_schema_person_user'] ) {
aioseo()->options->searchAppearance->global->schema->person = 'manual';
} else {
aioseo()->options->searchAppearance->global->schema->person = intval( $this->oldOptions['aiosp_schema_person_user'] );
}
}
}
/**
* Migrates the schema phone number.
*
* @since 4.0.0
*
* @return void
*/
private function migrateSchemaPhoneNumber() {
if ( empty( $this->oldOptions['aiosp_schema_phone_number'] ) ) {
return;
}
$phoneNumber = aioseo()->helpers->sanitizeOption( $this->oldOptions['aiosp_schema_phone_number'] );
if ( ! preg_match( '#\+\d+#', (string) $phoneNumber ) ) {
$notification = Models\Notification::getNotificationByName( 'v3-migration-schema-number' );
if ( $notification->notification_name ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'v3-migration-schema-number',
'title' => __( 'Invalid Phone Number for Knowledge Graph', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The phone number.
__( 'The phone number that you previously entered for your Knowledge Graph schema markup is invalid. As it needs to be internationally formatted, please enter it (%1$s) again with the country code, e.g. +1 (555) 555-1234.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
"<strong>$phoneNumber</strong>"
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://route#aioseo-search-appearance&aioseo-scroll=schema-graph-phone&aioseo-highlight=schema-graph-phone:global-settings',
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/v3-migration-schema-number-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
return;
}
aioseo()->options->searchAppearance->global->schema->phone = $phoneNumber;
}
/**
* Migrates the homepage keywords.
*
* @since 4.0.0
*
* @return void
*/
private function migrateHomePageKeywords() {
if ( ! empty( $this->oldOptions['aiosp_home_keywords'] ) ) {
aioseo()->options->searchAppearance->global->keywords = aioseo()->migration->helpers->oldKeywordsToNewKeywords( $this->oldOptions['aiosp_home_keywords'] );
}
}
/**
* Migrates the deprecated V3 advanced General Settings options.
*
* @since 4.0.0
*
* @return void
*/
private function migrateDeprecatedAdvancedOptions() {
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
if ( empty( $this->oldOptions['aiosp_generate_descriptions'] ) ) {
array_push( $deprecatedOptions, 'autogenerateDescriptions' );
aioseo()->options->deprecated->searchAppearance->advanced->autogenerateDescriptions = false;
} else {
if ( ! empty( $this->oldOptions['aiosp_skip_excerpt'] ) ) {
array_push( $deprecatedOptions, 'useContentForAutogeneratedDescriptions' );
aioseo()->options->deprecated->searchAppearance->advanced->useContentForAutogeneratedDescriptions = true;
}
}
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
}
/**
* Migrates the RSS content settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRssContentSettings() {
if ( isset( $this->oldOptions['aiosp_rss_content_before'] ) ) {
aioseo()->options->rssContent->before = esc_html( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_rss_content_before'] ) );
}
if ( isset( $this->oldOptions['aiosp_rss_content_after'] ) ) {
aioseo()->options->rssContent->after = esc_html( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_rss_content_after'] ) );
}
}
/**
* Migrates the Redirect Attachment to Parent setting.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRedirectToParent() {
if ( isset( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
if ( ! empty( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
} else {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
}
}
}
/**
* Migrates the excluded posts.
*
* @since 4.0.0
*
* @return void
*/
private function migrateDisabledPosts() {
if ( empty( $this->oldOptions['aiosp_ex_pages'] ) ) {
return;
}
$deprecatedOptions = aioseo()->internalOptions->internal->deprecatedOptions;
if ( ! in_array( 'excludePosts', $deprecatedOptions, true ) ) {
array_push( $deprecatedOptions, 'excludePosts' );
aioseo()->internalOptions->internal->deprecatedOptions = $deprecatedOptions;
}
$excludedPosts = aioseo()->options->deprecated->searchAppearance->advanced->excludePosts;
$pages = explode( ',', $this->oldOptions['aiosp_ex_pages'] );
if ( count( $pages ) ) {
foreach ( $pages as $page ) {
$page = trim( $page );
$id = intval( $page );
if ( ! $id ) {
$post = get_page_by_path( $page, OBJECT, aioseo()->helpers->getPublicPostTypes( true ) );
if ( $post && is_object( $post ) ) {
$id = $post->ID;
}
}
if ( $id ) {
$post = get_post( $id );
if ( ! is_object( $post ) ) {
continue;
}
$excludedPost = new \stdClass();
$excludedPost->value = $id;
$excludedPost->type = $post->post_type;
$excludedPost->label = $post->post_title;
$excludedPost->link = get_permalink( $id );
array_push( $excludedPosts, wp_json_encode( $excludedPost ) );
}
}
}
aioseo()->options->deprecated->searchAppearance->advanced->excludePosts = $excludedPosts;
}
/**
* Migrates the deprecated "No Pagination for Canonical URLs" setting.
*
* @since 4.5.9
*
* @return void
*/
private function migrateNoPaginationForCanonicalUrls() {
if ( empty( $this->oldOptions['aiosp_no_paged_canonical_links'] ) ) {
return;
}
$deprecatedOptions = aioseo()->internalOptions->deprecatedOptions;
if ( ! in_array( 'noPaginationForCanonical', $deprecatedOptions, true ) ) {
$deprecatedOptions[] = 'noPaginationForCanonical';
aioseo()->internalOptions->deprecatedOptions = $deprecatedOptions;
}
aioseo()->options->deprecated->searchAppearance->advanced->noPaginationForCanonical = true;
}
} wp-content/plugins/all-in-one-seo-pack/app/Common/ImportExport/SeoPress/GeneralSettings.php 0000644 00000010307 15114411426 0033014 0 ustar 00 home/xbodynamge/namtation <?php
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings.
*
* @since 4.1.4
*/
class GeneralSettings {
/**
* List of options.
*
* @since 4.2.7
*
* @var array
*/
private $options = [];
/**
* List of our access control roles.
*
* @since 4.2.7
*
* @var array
*/
private $roles = [];
/**
* Class constructor.
*
* @since 4.1.4
*/
public function __construct() {
$this->options = get_option( 'seopress_advanced_option_name' );
if ( empty( $this->options ) ) {
return;
}
$this->roles = aioseo()->access->getRoles();
$this->migrateBlockMetaboxRoles();
$this->migrateBlockContentAnalysisRoles();
$this->migrateAttachmentRedirects();
$settings = [
'seopress_advanced_advanced_google' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'seopress_advanced_advanced_bing' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'seopress_advanced_advanced_pinterest' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
'seopress_advanced_advanced_yandex' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
];
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
}
/**
* Migrates Block AIOSEO metabox setting.
*
* @since 4.1.4
*
* @return void
*/
private function migrateBlockMetaboxRoles() {
$seoPressRoles = ! empty( $this->options['seopress_advanced_security_metaboxe_role'] ) ? $this->options['seopress_advanced_security_metaboxe_role'] : '';
if ( empty( $seoPressRoles ) ) {
return;
}
$roleSettings = [ 'useDefault', 'pageAnalysis', 'pageGeneralSettings', 'pageSocialSettings', 'pageSchemaSettings', 'pageAdvancedSettings' ];
foreach ( $seoPressRoles as $wpRole => $value ) {
$role = $this->roles[ $wpRole ];
if ( empty( $role ) || aioseo()->access->isAdmin( $role ) ) {
continue;
}
if ( aioseo()->options->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->options->accessControl->$role->$setting = false;
}
} elseif ( aioseo()->dynamicOptions->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->dynamicOptions->accessControl->$role->$setting = false;
}
}
}
}
/**
* Migrates Block Content analysis metabox setting.
*
* @since 4.1.4
*
* @return void
*/
private function migrateBlockContentAnalysisRoles() {
$seoPressRoles = ! empty( $this->options['seopress_advanced_security_metaboxe_ca_role'] ) ? $this->options['seopress_advanced_security_metaboxe_ca_role'] : '';
if ( empty( $seoPressRoles ) ) {
return;
}
$roleSettings = [ 'useDefault', 'pageAnalysis' ];
foreach ( $seoPressRoles as $wpRole => $value ) {
$role = $this->roles[ $wpRole ];
if ( empty( $role ) || aioseo()->access->isAdmin( $role ) ) {
continue;
}
if ( aioseo()->options->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->options->accessControl->$role->$setting = false;
}
} elseif ( aioseo()->dynamicOptions->accessControl->has( $role ) ) {
foreach ( $roleSettings as $setting ) {
aioseo()->dynamicOptions->accessControl->$role->$setting = false;
}
}
}
}
/**
* Migrates redirect attachment pages settings.
*
* @since 4.1.4
*
* @return void
*/
private function migrateAttachmentRedirects() {
if ( ! empty( $this->options['seopress_advanced_advanced_attachments'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
}
if ( ! empty( $this->options['seopress_advanced_advanced_attachments_file'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment';
}
if ( empty( $this->options['seopress_advanced_advanced_attachments'] ) && empty( $this->options['seopress_advanced_advanced_attachments_file'] ) ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
}
}
} wp-content/plugins/all-in-one-seo-pack/app/Common/ImportExport/RankMath/GeneralSettings.php 0000644 00000005777 15114413026 0032773 0 ustar 00 home/xbodynamge/namtation <?php
namespace AIOSEO\Plugin\Common\ImportExport\RankMath;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings.
*
* @since 4.0.0
*/
class GeneralSettings {
/**
* List of options.
*
* @since 4.2.7
*
* @var array
*/
private $options = [];
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->options = get_option( 'rank-math-options-general' );
if ( empty( $this->options ) ) {
return;
}
$this->isTruSeoDisabled();
$this->migrateRedirectAttachments();
$this->migrateStripCategoryBase();
$this->migrateRssContentSettings();
$settings = [
'google_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'bing_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'yandex_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
'baidu_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'baidu' ] ],
'pinterest_verify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
];
aioseo()->importExport->rankMath->helpers->mapOldToNew( $settings, $this->options );
}
/**
* Checks whether TruSEO should be disabled.
*
* @since 4.0.0
*
* @return void
*/
private function isTruSeoDisabled() {
if ( ! empty( $this->options['frontend_seo_score'] ) ) {
aioseo()->options->advanced->truSeo = 'on' === $this->options['frontend_seo_score'];
}
}
/**
* Migrates the Redirect Attachments setting.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRedirectAttachments() {
if ( isset( $this->options['attachment_redirect_urls'] ) ) {
if ( 'on' === $this->options['attachment_redirect_urls'] ) {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
} else {
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
}
}
}
/**
* Migrates the Strip Category Base setting.
*
* @since 4.2.0
*
* @return void
*/
private function migrateStripCategoryBase() {
if ( isset( $this->options['strip_category_base'] ) ) {
aioseo()->options->searchAppearance->advanced->removeCategoryBase = 'on' === $this->options['strip_category_base'] ? true : false;
}
}
/**
* Migrates the RSS content settings.
*
* @since 4.0.0
*
* @return void
*/
private function migrateRssContentSettings() {
if ( isset( $this->options['rss_before_content'] ) ) {
aioseo()->options->rssContent->before = esc_html( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $this->options['rss_before_content'] ) );
}
if ( isset( $this->options['rss_after_content'] ) ) {
aioseo()->options->rssContent->after = esc_html( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $this->options['rss_after_content'] ) );
}
}
} wp-content/plugins/all-in-one-seo-pack/app/Common/ImportExport/YoastSeo/GeneralSettings.php 0000644 00000002233 15114414440 0033015 0 ustar 00 home/xbodynamge/namtation <?php
namespace AIOSEO\Plugin\Common\ImportExport\YoastSeo;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
/**
* Migrates the General Settings.
*
* @since 4.0.0
*/
class GeneralSettings {
/**
* List of options.
*
* @since 4.2.7
*
* @var array
*/
private $options = [];
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->options = get_option( 'wpseo' );
if ( empty( $this->options ) ) {
return;
}
$settings = [
'googleverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
'msverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
'yandexverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
'baiduverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'baidu' ] ],
'enable_xml_sitemap' => [ 'type' => 'boolean', 'newOption' => [ 'sitemap', 'general', 'enable' ] ]
];
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options );
}
}