Current File : /home/quantums/bodyguardslosangeles.net/wp-content/themes/seosight/inc/hooks.php
<?php

if ( ! defined( 'ABSPATH' ) ) {
	die( 'Direct access forbidden.' );
}
/**
 * Filters and Actions
 */

/**
 * Enqueue Google fonts style to admin screen for custom header display.
 * @internal
 */
function _action_seosight_admin_fonts() {
	wp_enqueue_style( 'seosight-font', seosight_font_url(), array(), '1.0' );
}

add_action( 'admin_print_scripts-appearance_page_custom-header', '_action_seosight_admin_fonts' );

if ( ! function_exists( '_action_seosight_setup' ) ) :
	/**
	 * Theme setup.
	 *
	 * Set up theme defaults and registers support for various WordPress features.
	 *
	 * Note that this function is hooked into the after_setup_theme hook, which
	 * runs before the init hook. The init hook is too late for some features, such
	 * as indicating support post thumbnails.
	 * @internal
	 */
	{

		function _action_seosight_setup() {
			// Add custom background
			add_theme_support( 'custom-background', array(
				'wp-head-callback' => 'seosight_custom_background_cb',
			) );

			add_theme_support( "title-tag" );
			/*
			 * Make Theme available for translation.
			 */
			load_theme_textdomain( 'seosight', get_template_directory() . '/languages/theme' );

			// Add RSS feed links to <head> for posts and comments.
			add_theme_support( 'automatic-feed-links' );

			// Enable support for Post Thumbnails, and declare two sizes.
			add_theme_support( 'post-thumbnails' );
			set_post_thumbnail_size( 690, 420, true );
			add_image_size( 'seosight-full-width', 1038, 576, true );
			add_image_size( 'seosight-full', 1170, 576, true );

			/*
			 * Switch default core markup for search form, comment form, and comments
			 * to output valid HTML5.
			 */
			add_theme_support( 'html5', array(
				'search-form',
				'comment-form',
				'comment-list',
				'gallery',
				'caption'
			) );

			/*
			 * Enable support for Post Formats.
			 * See http://codex.wordpress.org/Post_Formats
			 */
			add_theme_support( 'post-formats', array(
				'video',
				'audio',
				'quote',
				'link',
				'gallery',
			) );

			// This theme uses its own gallery styles.
			add_filter( 'use_default_gallery_style', '__return_false' );

			// Declare 3-rd party plugins support
			add_theme_support( 'woocommerce', array(
				'product_grid' => array(
					'default_rows'    => 4,
					'min_rows'        => 2,
					'max_rows'        => 9,
					'default_columns' => 3,
					'min_columns'     => 2,
					'max_columns'     => 5,
				),
			) );
			add_theme_support( 'wc-product-gallery-zoom' );
			add_theme_support( 'wc-product-gallery-lightbox' );
			add_theme_support( 'wc-product-gallery-slider' );

			// Change kingcomposer modules path
			global $kc;
			if ( $kc && is_child_theme() && class_exists( 'KingComposer' ) ) {
				$kc->set_template_path( get_stylesheet_directory() . KDS . 'kingcomposer' . KDS );
			}

		}

	}
endif;
add_action( 'after_setup_theme', '_action_seosight_setup' );

/**
 * Extend the default WordPress body classes.
 *
 * Adds body classes to denote:
 * 1. Single or multiple authors.
 * 2. Presence of header image.
 * 3. Index views.
 * 4. Full-width content layout.
 * 5. Presence of footer widgets.
 * 6. Single views.
 *
 * @param array $classes A list of existing body class values.
 *
 * @return array The filtered body class list.
 * @internal
 */
function _filter_seosight_body_classes( $classes ) {
	if ( is_multi_author() ) {
		$classes[] = 'group-blog';
	}

	if ( is_archive() || is_search() || is_home() ) {
		$classes[] = 'list-view';
	}

	if ( is_active_sidebar( 'sidebar-footer' ) ) {
		$classes[] = 'footer-widgets';
	}

	if ( is_singular() && ! is_front_page() ) {
		$classes[] = 'singular';
	}

	$classes[] = 'crumina-grid';

	return $classes;
}

add_filter( 'body_class', '_filter_seosight_body_classes' );

/**
 * Extend the default WordPress post classes.
 *
 * Adds a post class to denote:
 * Non-password protected page with a post thumbnail.
 *
 * @param array $classes A list of existing post class values.
 *
 * @return array The filtered post class list.
 * @internal
 */
function _filter_seosight_post_classes( $classes ) {
	if ( ! post_password_required() && ! is_attachment() && has_post_thumbnail() ) {
		$classes[] = 'has-post-thumbnail';
	}

	return $classes;
}

add_filter( 'post_class', '_filter_seosight_post_classes' );

/**
 * Create a nicely formatted and more specific title element text for output
 * in head of document, based on current view.
 *
 * @param string $title Default title text for current view.
 * @param string $sep Optional separator.
 *
 * @return string The filtered title.
 * @internal
 */
function _filter_seosight_wp_title( $title, $sep ) {
	global $paged, $page;

	if ( is_feed() ) {
		return $title;
	}

	// Add the site name.
	$title .= get_bloginfo( 'name', 'display' );

	// Add the site description for the home/front page.
	$site_description = get_bloginfo( 'description', 'display' );
	if ( $site_description && ( is_home() || is_front_page() ) ) {
		$title = "$title $sep $site_description";
	}

	// Add a page number if necessary.
	if ( $paged >= 2 || $page >= 2 ) {
		$title = "$title $sep " . sprintf( esc_html__( 'Page %s', 'seosight' ), max( $paged, $page ) );
	}

	return $title;
}

add_filter( 'wp_title', '_filter_seosight_wp_title', 10, 2 );

/**
 * Flush out the transients used in seosight_categorized_blog.
 * @internal
 */
function _action_seosight_category_transient_flusher() {
	// Like, beat it. Dig?
	delete_transient( 'seosight_category_count' );
}

add_action( 'edit_category', '_action_seosight_category_transient_flusher' );
add_action( 'save_post', '_action_seosight_category_transient_flusher' );

/**
 * Register widget areas.
 * @internal
 */
function _action_seosight_widgets_init() {

	register_sidebar( array(
		'name'          => esc_html__( 'Main Widget Area', 'seosight' ),
		'id'            => 'sidebar-main',
		'description'   => esc_html__( 'Appears in the right section of the site.', 'seosight' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<div class="crumina-heading widget-heading"><h5 class="heading-title">',
		'after_title'   => '</h5><div class="heading-decoration"><span class="first"></span><span class="second"></span></div></div>',
	) );
	register_sidebar( array(
		'name'          => esc_html__( 'Hidden Widget Area', 'seosight' ),
		'id'            => 'sidebar-hidden',
		'description'   => esc_html__( 'Appears in the Hidden section. If available.', 'seosight' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<h4 class="heading-title">',
		'after_title'   => '</h4>',
	) );
	register_sidebar( array(
		'name'          => esc_html__( 'Footer Widget Area', 'seosight' ),
		'id'            => 'sidebar-footer',
		'description'   => esc_html__( 'Appears in footer section. Every widget in own column ', 'seosight' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s columns_class_replace">',
		'after_widget'  => '</aside>',
		'before_title'  => '<div class="crumina-heading widget-heading"><h4 class="heading-title">',
		'after_title'   => '</h4><div class="heading-decoration"><span class="first"></span><span class="second"></span></div></div>',
	) );
}

add_action( 'widgets_init', '_action_seosight_widgets_init' );

/**
 * Count Widgets
 * Count the number of widgets to add dynamic column class
 *
 * @param string $sidebar_id id of sidebar
 *
 * @since 1.0.0
 *
 * @return int
 */
function seosight_get_widget_columns( $sidebar_id ) {
	// Default number of columns in grid is 12
	$columns = apply_filters( 'seosight_columns', 12 );

	// get the sidebar widgets
	$the_sidebars = wp_get_sidebars_widgets();

	// if sidebar doesn't exist return error
	if ( ! isset( $the_sidebars[ $sidebar_id ] ) ) {
		return esc_html__( 'Invalid sidebar ID', 'seosight' );
	}

	/* count number of widgets in the sidebar
	  and do some simple math to calculate the columns */
	$num = count( $the_sidebars[ $sidebar_id ] );

	switch ( $num ) {
		case 1 :
			$num = $columns;
			break;
		case 2 :
			$num = $columns / 2;
			break;
		case 3 :
			$num = $columns / 3;
			break;
		case 4 :
			$num = $columns / 4;
			break;
		case 5 :
			$num = $columns / 5;
			break;
		case 6 :
			$num = $columns / 6;
			break;
		case 7 :
			$num = $columns / 7;
			break;
		case 8 :
			$num = $columns / 8;
			break;
	}
	$num = floor( $num );

	return $num;
}

if ( defined( 'FW' ) ):
	/**
	 * Display current submitted FW_Form errors
	 * @return array
	 */
	if ( ! function_exists( '_action_seosight_display_form_errors' ) ):

		function _action_seosight_display_form_errors() {
			$form = FW_Form::get_submitted();

			if ( ! $form || $form->is_valid() ) {
				return;
			}

			wp_enqueue_script(
				'seosight-show-form-errors',
				get_template_directory_uri() . '/js/form-errors.js',
				array( 'jquery' ),
				'1.0',
				true
			);

			wp_localize_script( 'seosight-show-form-errors', '_localized_form_errors', array(
				'errors'  => $form->get_errors(),
				'form_id' => $form->get_id()
			) );
		}

	endif;
	add_action( 'wp_enqueue_scripts', '_action_seosight_display_form_errors' );
endif;

/**
 * Custom read more Link formatting
 *
 * @return string
 */
function seosight_read_more_link() {
	return '<div class="more-link"><a href="' . get_permalink() . '" class="btn btn-small btn--dark btn-hover-shadow"><span class="text">' . esc_html__( 'Continue Reading', 'seosight' ) . '</span><i class="seoicon-right-arrow"></i></a></div>';
}

function seosight_excerpt_link( $output ) {
	return $output . '</p><div class="more-link"><a href="' . get_permalink() . '" class="btn btn-small btn--dark btn-hover-shadow"><span class="text">' . esc_html__( 'Continue Reading', 'seosight' ) . '</span><i class="seoicon-right-arrow"></i></a></div>';
}

add_filter( 'the_content_more_link', 'seosight_read_more_link' );
add_filter( 'the_excerpt', 'seosight_excerpt_link' );

function seosight_move_comment_field_to_bottom( $fields ) {
	$comment_field = $fields['comment'];
	unset( $fields['comment'] );
	$fields['comment'] = $comment_field;

	return $fields;
}

add_filter( 'comment_form_fields', 'seosight_move_comment_field_to_bottom' );

add_filter(
	'fw:option_type:icon-v2:packs',
	'_add_more_packs'
);

function _add_more_packs( $default_packs ) {
	return array(
		'seosight' => array(
			'name'             => 'seosight',
			'css_class_prefix' => 'seoicon',
			'css_file'         => get_template_directory() . '/css/crumina-icons.css',
			'css_file_uri'     => get_template_directory_uri() . '/css/crumina-icons.css'
		)
	);
}

function _filter_seosight_disable_sliders( $sliders ) {
	foreach ( array( 'owl-carousel', 'bx-slider', 'nivo-slider' ) as $name ) {
		$key = array_search( $name, $sliders );
		unset( $sliders[ $key ] );
	}

	return $sliders;
}

add_filter( 'fw_ext_slider_activated', '_filter_seosight_disable_sliders' );

/**
 * Add tags to allowedtags filter
 */
function seosight_extend_allowed_tags() {
	global $allowedtags;

	$allowedtags['i']    = array(
		'class' => array(),
	);
	$allowedtags['br']   = array(
		'class' => array(),
	);
	$allowedtags['img']  = array(
		'src'    => array(),
		'alt'    => array(),
		'width'  => array(),
		'height' => array(),
		'class'  => array(),
	);
	$allowedtags['span'] = array(
		'class' => array(),
		'style' => array(),
	);
	$allowedtags['a']    = array(
		'class'   => array(),
		'href'    => array(),
		'target'  => array(),
		'onclick' => array(),
		'rel'     => array(),
	);
}

add_action( 'init', 'seosight_extend_allowed_tags' );

/**
 * Change text strings
 *
 * @link http://codex.wordpress.org/Plugin_API/Filter_Reference/gettext
 */
function seosight_text_strings( $translated_text, $text, $domain ) {
	switch ( $translated_text ) {
		case 'Add Sidebar' :
			$translated_text = esc_html__( 'Save changes', 'seosight' );
			break;
	}

	return $translated_text;
}

add_filter( 'gettext', 'seosight_text_strings', 20, 3 );

/**
 * Disable content editor for page template.
 */
function seosight_disable_admin_metabox() {

	$only = array(
		'only' => array( array( 'id' => 'page' ) ),
	);
	if ( function_exists( 'fw_current_screen_match' ) && fw_current_screen_match( $only ) ) {
		$post_id = ( isset( $_GET['post'] ) ) ? $_GET['post'] : '';
		if ( empty( $post_id ) ) {
			remove_meta_box( 'fw-options-box-portfolio-page', 'page', 'normal' );
			remove_meta_box( 'fw-options-box-blog-page', 'page', 'normal' );
		}
		$template_file = get_post_meta( $post_id, '_wp_page_template', true );
		if ( 'portfolio-template.php' === $template_file ) {
			remove_meta_box( 'fw-options-box-blog-page', 'page', 'normal' );
		} elseif ( 'blog-template.php' === $template_file || 'blog-template-grid.php' === $template_file || 'blog-template-masonry.php' === $template_file ) {
			remove_meta_box( 'fw-options-box-portfolio-page', 'page', 'normal' );
		} else {
			remove_meta_box( 'fw-options-box-portfolio-page', 'page', 'normal' );
			remove_meta_box( 'fw-options-box-blog-page', 'page', 'normal' );
		}
	}
}

add_action( 'do_meta_boxes', 'seosight_disable_admin_metabox', 99 );

/**
 * Extend the default WordPress category title.
 *
 * Remove 'Category' word from cat title.
 *
 * @param string $title Original category title.
 *
 * @return string The filtered category title.
 * @internal
 */
function _filter_seosight_archive_title( $title ) {
	if ( is_home() ) {
		$title = esc_html__( 'Latest posts', 'seosight' );
	} elseif ( is_category() ) {
		$title = single_cat_title( '', false );
	} elseif ( ( is_singular( 'post' ) ) ) {
		$category = get_the_category( get_the_ID() );
		$title    = $category[0]->name;
	} elseif ( is_singular( 'product' ) || is_singular( 'download' ) ) {
		$title = '<h2 class="stunning-header-title h1">' . esc_html__( 'Product Details', 'seosight' ) . '</h2>';
	}

	return $title;
}

add_filter( 'get_the_archive_title', '_filter_seosight_archive_title' );

/**
 *  Demo install config
 *
 * @param FW_Ext_Backups_Demo[] $demos
 *
 * @return FW_Ext_Backups_Demo[]
 */
function _filter_seosight_fw_ext_backups_demos( $demos ) {
	$demos_array = array(
		'seosight-elementor'    => array(
			'title'        => esc_html__( 'Elementor Demo', 'seosight' ),
			'screenshot'   => get_template_directory_uri() . '/images/seosight-with-elementor.png',
			'preview_link' => 'https://seosight.crumina.net/',
		),
		/*'seosight-kingcomposer' => array(
			'title'        => esc_html__( 'KingComposer Demo', 'seosight' ),
			'screenshot'   => get_template_directory_uri() . '/images/seosight-with-kingcomposer.png',
			'preview_link' => 'https://seosight.crumina.net/',
		),*/
	);

	$download_url = 'http://up.crumina.net/demo-data/seosight/upload.php';

	foreach ( $demos_array as $id => $data ) {
		$demo = new FW_Ext_Backups_Demo( $id, 'piecemeal', array(
			'url'     => $download_url,
			'file_id' => $id,
		) );
		$demo->set_title( $data['title'] );
		$demo->set_screenshot( $data['screenshot'] );
		$demo->set_preview_link( $data['preview_link'] );

		$demos[ $demo->get_id() ] = $demo;

		unset( $demo );
	}

	return $demos;
}

add_filter( 'fw:ext:backups-demo:demos', '_filter_seosight_fw_ext_backups_demos' );

function _filter_seosight_fw_db_keep_options( $keep, $is_full_backup ) {

	$keep = $keep + array(
			'crum_seosight_auto_install_state' => true,
			'SeosightSEO_lic_Key' => true,
            'seosight_update_new_license' => true,
		);

	return $keep;
}

add_filter( 'fw_ext_backups_db_restore_keep_options', '_filter_seosight_fw_db_keep_options', 10, 2 );

/**
 * Modify query to remove a post type from search results, but keep all others
 *
 * @author Joshua David Nelson, josh@joshuadnelson.com
 * @license http://www.gnu.org/licenses/gpl-2.0.html GPLv2+
 */
add_action( 'pre_get_posts', 'seosight_search_modify_query' );

function seosight_search_modify_query( $query ) {

	// First, make sure this isn't the admin and is the main query, otherwise bail
	if ( is_admin() || ! $query->is_main_query() ) {
		return;
	}

	// If this is a search result query
	if ( $query->is_search() ) {
		// Gather all searchable post types
		$in_search_post_types = get_post_types( array( 'exclude_from_search' => false ) );
		// The post type you're removing, in this example 'kc-section'
		$post_type_to_remove = 'kc-section';
		// Make sure you got the proper results, and that your post type is in the results
		if ( is_array( $in_search_post_types ) && in_array( $post_type_to_remove, $in_search_post_types ) ) {
			// Remove the post type from the array
			unset( $in_search_post_types[ $post_type_to_remove ] );
			// set the query to the remaining searchable post types
			$query->set( 'post_type', $in_search_post_types );
		}
	}
}

/**
 * Extension update message
 */
add_action( 'admin_notices', 'seosight_update_checker_message' );

function seosight_update_checker_message() {

	if ( ! function_exists( 'fw' ) ) {
		return;
	}

	$update_checker = fw()->extensions->get( 'update-checker' );
	if ( ! $update_checker ) {
		return;
	}

	if ( ! version_compare( $update_checker->manifest->get_version(), '2.0.0', '<' ) ) {
		return;
	}

	$class   = 'notice notice-error';
	$message = __( sprintf( 'Please, delete and reinstall Unyson Update checker to get automatic theme updates. <a href="%1$s" class="button button-primary" target="_blank">%2$s</a>', 'https://support.crumina.net/help-center/articles/252/theme-is-not-activated', esc_html__( 'View instruction', 'seosight' ) ), 'seosight' );

	printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), $message );
}

/**
 * Add shortcode support for text widgets
 */
add_filter( 'widget_text', 'shortcode_unautop' );
add_filter( 'widget_text', 'do_shortcode' );

/**
 * Enqueue woocommerce scripts
 */
add_filter( 'woocommerce_is_checkout', 'seosight_woocommerce_is_checkout' );

function seosight_woocommerce_is_checkout( $checkout ) {
	global $post;

	if ( ! isset( $post->post_content_filtered ) ) {
		return $checkout;
	}

	if ( has_shortcode( $post->post_content_filtered, 'woocommerce_checkout' ) ) {
		$checkout = true;
	}

	return $checkout;
}

add_action( 'fw_extensions_before_init', '_action_crum_disable_fw_blog' );

function _action_crum_disable_fw_blog() {
	if ( ( $e = get_option( 'fw_active_extensions' ) ) && isset( $e['update-checker'] ) ) {
		unset( $e['update-checker'] );
		update_option( 'fw_active_extensions', $e );
	}
}

// Notice to install KingComposer Seosight.
add_action( 'admin_init', 'seosight_check_kingcomposer_seosight' );
function seosight_check_kingcomposer_seosight() {
	if ( ! class_exists( 'KingComposer_Seosight' ) && in_array( 'kingcomposer/kingcomposer.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
		add_action( 'admin_notices', 'seosight_check_kingcomposer_seosight_notice' );
	}
}

function seosight_check_kingcomposer_seosight_notice() {
	$dismissed = get_option( 'seosight_kc_notice_dismissed', '' );
	if ( $dismissed != '1' ) {
		$tgm_link     = '';
		$action       = 'install';
		$notice_class = ' notice-error';

		$pathpluginurl = WP_PLUGIN_DIR . '/kingcomposer-seosight/kingcomposer-seosight.php';
		$isinstalled   = file_exists( $pathpluginurl );
		if ( $isinstalled ) {
			$action       = 'activate';
			$notice_class = '';
		}

		if ( class_exists( 'TGM_Plugin_Activation' ) ) {
			$tgm      = new TGM_Plugin_Activation();
			$tgm_link = $tgm->get_tgmpa_status_url( $action );
		}
		?>
        <div class="notice seosight-kc-notice<?php echo esc_attr( $notice_class ); ?> is-dismissible">
			<?php
			echo wp_sprintf( __( 'We moved all theme widgets to a separate plugin. Please, %s the %s plugin to reactivate them.', 'seosight' ), $action, '<a href="' . esc_url( $tgm_link ) . '"><b>KingComposer Seosight</b></a>' );
			?>
        </div>
		<?php
	}
}

add_action( 'wp_ajax_seosight_dismissed_notice', 'seosight_dismissed_notice_save' );
function seosight_dismissed_notice_save() {
	update_option( 'seosight_kc_notice_dismissed', '1' );
	exit;
}

// Redirect to TGM page after theme update
add_action( 'upgrader_process_complete', 'seosight_theme_upgrate_check', 10, 2 );
function seosight_theme_upgrate_check( $upgrader_object, $hook_extra ) {
	$themes_arr = ( isset( $hook_extra['themes'] ) ) ? $hook_extra['themes'] : array();
	if ( in_array( 'seosight', $themes_arr ) ) {
		set_transient( 'seosight_upe_updated', 1 );
	}
}

add_action( 'admin_init', 'seosight_theme_upgrate_redirect' );
function seosight_theme_upgrate_redirect() {
	if ( get_transient( 'seosight_upe_updated' ) ) {
		if ( is_admin() && ! defined( 'DOING_AJAX' ) && class_exists( 'TGMPA_List_Table' ) ) {
			$tgmpa_list_table = new TGMPA_List_Table();
			$plugins          = $tgmpa_list_table->categorize_plugins_to_views();
			$plugins_all      = ( isset( $plugins['all'] ) ) ? $plugins['all'] : array();
			$do_redirect      = false;
			if ( ! empty( $plugins_all ) ) {
				foreach ( $plugins_all as $pl ) {
					if ( isset( $pl['required'] ) && $pl['required'] == '1' ) {
						$do_redirect = true;
					}
				}
			}
			if ( true === $do_redirect ) {
				$tgm_link = '';
				if ( class_exists( 'TGM_Plugin_Activation' ) ) {
					$tgm      = new TGM_Plugin_Activation();
					$tgm_link = $tgm->get_tgmpa_status_url( 'install' );
				}
				if ( $tgm_link != '' ) {
					delete_transient( 'seosight_upe_updated' );
					wp_redirect( $tgm_link );
					exit;
				}
			}
		}
	}
	delete_transient( 'seosight_upe_updated' );
}

add_filter( 'wp_nav_menu_objects', 'seosight_filter_fw_ext_mega_menu_wp_nav_menu_objects', 20, 2 );
function seosight_filter_fw_ext_mega_menu_wp_nav_menu_objects( $sorted_menu_items, $args ) {
	$mega_menu = array();
	foreach ( $sorted_menu_items as $item ) {
		$mega_fields      = get_post_meta( $item->ID, 'seosight_menu_options', true );
		$enable_mega_menu = ( isset( $mega_fields['megamenu-enable'] ) ) ? $mega_fields['megamenu-enable'] : false;
		if ( $item->menu_item_parent == 0 && $enable_mega_menu ) {
			if ( defined( 'FW' ) && fw_ext( 'megamenu' ) ) {
				$mega_menu[ $item->ID ] = true;
			}
		}
	}

	foreach ( $sorted_menu_items as $item ) {
		if ( isset( $mega_menu[ $item->ID ] ) ) {
			$item->classes[] = 'menu-item-has-mega-menu';
		}
		if ( isset( $mega_menu[ $item->menu_item_parent ] ) ) {
			$item->classes[] = 'mega-menu-col';
		}
		$parsed_icn = get_post_meta( $item->ID, 'seosight_menu_icon', true );
		$icon_class = isset( $parsed_icn['icon_class'] ) ? $parsed_icn['icon_class'] : '';
		$icon_url   = isset( $parsed_icn['icon_url'] ) ? $parsed_icn['icon_url'] : '';
		if ( $icon_class != '' || $icon_url != '' ) {
			$item->classes[] = 'menu-item-has-icon';
		}
	}

	return $sorted_menu_items;
}

/**
 * Update new options
 */
add_action( 'admin_init', 'seosight_update_new_options' );
function seosight_update_new_options() {
	$meta_update = get_option( 'seosight_new_options_update' );
	if ( $meta_update != '1' ) {
		seosight_regenerate_menu_meta();
		seosight_regenerate_subscribe_customizer_options();
		seosight_update_email_subscribers_option();
		update_option( 'seosight_new_options_update', '1' );
	}

	$customizer_meta_update = get_option( 'seosight_new_options_customizer_update' );
	if ( $customizer_meta_update != '2' ) {
		seosight_update_customizer_options();
		update_option( 'seosight_new_options_customizer_update', '2' );
	}
}

/**
 * Regenerate menu meta.
 */
function seosight_regenerate_menu_meta() {
	$query = new WP_Query( array(
		'post_type'      => 'nav_menu_item',
		'posts_per_page' => - 1
	) );

	$menu_items      = $query->get_posts();
	$menu_items_meta = array();

	if ( ! empty( $menu_items ) ) {
		foreach ( $menu_items as $menu_item ) {
			$single_meta          = array();
			$single_meta_icon_arr = array();
			$item_id              = $menu_item->ID;
			$mega_menu_meta       = get_post_meta( $item_id, 'mega-menu', true );
			if ( ! empty( $mega_menu_meta ) ) {
				$single_meta_icon                   = ( isset( $mega_menu_meta['icon'] ) ) ? $mega_menu_meta['icon'] : '';
				$single_meta_icon                   = (array) json_decode( urldecode( $single_meta_icon ) );
				$single_meta_icon_arr['icon_type']  = ( isset( $single_meta_icon['type'] ) ) ? $single_meta_icon['type'] : 'icon-font';
				$single_meta_icon_arr['icon_class'] = ( isset( $single_meta_icon['icon-class'] ) ) ? $single_meta_icon['icon-class'] : '';
				$single_meta_icon_arr['icon_url']   = ( isset( $single_meta_icon['url'] ) ) ? $single_meta_icon['url'] : '';

				$single_meta['hide-title']      = ( isset( $mega_menu_meta['title-off'] ) ) ? (bool) ( $mega_menu_meta['title-off'] == 'yes' ) : false;
				$single_meta['megamenu-enable'] = ( isset( $mega_menu_meta['enabled'] ) ) ? (bool) ( $mega_menu_meta['enabled'] == 'yes' ) : false;
				$single_meta['new-row']         = ( isset( $mega_menu_meta['new-row'] ) ) ? (bool) ( $mega_menu_meta['new-row'] == 'yes' ) : false;
			}

			$menu_item_meta = get_post_meta( $item_id, 'fw:ext:mm:io:seosight-wp', true );
			if ( ! empty( $menu_item_meta ) ) {
				$single_meta['background-image']  = ( isset( $menu_item_meta['row']['bg-image']['url'] ) ) ? $menu_item_meta['row']['bg-image']['url'] : '';
				$single_meta['title_column_item'] = ( isset( $menu_item_meta['column']['title_column_item'] ) ) ? (bool) ( $menu_item_meta['column']['title_column_item'] == 'yes' ) : false;
			}

			if ( ! empty( $single_meta ) ) {
				update_post_meta( $item_id, 'seosight_menu_options', $single_meta );
				update_post_meta( $item_id, 'seosight_menu_icon', $single_meta_icon_arr );
			}
		}
	}
}

/**
 * Regenerate subscribe customizer options.
 */
function seosight_regenerate_subscribe_customizer_options() {
	$form_html_old       = seosight_get_option_value( 'section-subscribe-form/custom-form/html', '', array( 'name' => 'section-subscribe-form/custom-form/yes/html' ) );
	$name_field_show_old = seosight_get_option_value( 'section-subscribe-form/custom-form/show', false, array( 'name'     => 'section-subscribe-form/custom-form/no/name_field/show',
	                                                                                                           'bool_val' => '1'
	) );
	$name_field_swap_old = seosight_get_option_value( 'section-subscribe-form/custom-form/name_field_swap', false, array( 'name'     => 'section-subscribe-form/custom-form/no/name_field/true/name_field_swap',
	                                                                                                                      'bool_val' => '1'
	) );

	$all_options = get_option( 'seosight_customize_options' );
	if( isset($all_options['section-subscribe-form']['custom_form_html']) ){
		$all_options['section-subscribe-form']['custom_form_html'] = $form_html_old;
	}
	if( isset($all_options['section-subscribe-form']['show_form_name_field']) ){
		$all_options['section-subscribe-form']['show_form_name_field'] = $name_field_show_old;
	}
	if( isset($all_options['section-subscribe-form']['show_form_name_field_swap']) ){
		$all_options['section-subscribe-form']['show_form_name_field_swap'] = $name_field_swap_old;
	}

	update_option( 'seosight_customize_options', $all_options );
}

/**
 * Update email subscribers option.
 */
function seosight_update_email_subscribers_option() {
	if ( ! function_exists( 'es_subbox' ) ) {
		$all_options = get_option( 'seosight_customize_options' );
		if ( isset( $all_options['section-subscribe-form']['enable_email_subscribers'] ) ) {
			$all_options['section-subscribe-form']['enable_email_subscribers'] = 0;
		}
		update_option( 'seosight_customize_options', $all_options );
	}
}

/**
 * Update customizer options.
 */
function seosight_update_customizer_options() {
	$old_options = get_option( 'seosight_customize_options', array() );
	if( $old_options == '1' ){
		remove_theme_mod('seosight_customize_options');
	} elseif( !empty($old_options) ) {
		set_theme_mod( 'seosight_customize_options', $old_options );
	}
}

// Update lisence key
add_action('admin_init', 'seosight_update_license_key');
function seosight_update_license_key(){
    $meta_update = get_option( 'seosight_update_new_license' );
	if ( $meta_update != '1' ) {
        $cl_id = md5( wp_get_theme()->template );
        $lic = maybe_unserialize(get_option('appsero_'.$cl_id.'_manage_license'));

        if( isset($lic['status']) && isset($lic['key']) && $lic['status'] == 'activate' ){
            update_option("SeosightSEO_lic_Key", $lic['key']) || add_option("SeosightSEO_lic_Key", $lic['key']);
        }
		update_option( 'seosight_update_new_license', '1' );
    }
}

// Disables the block editor from managing widgets in the Gutenberg plugin.
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false', 100 );

// Disables the block editor from managing widgets. renamed from wp_use_widgets_block_editor
add_filter( 'use_widgets_block_editor', '__return_false' );

/**
 * Add link for updating Google fonts
 */
function seosight_filter_fw_googleapis_webfonts_url() {
	return 'https://webfonts.crumina.net/';
}
add_filter('fw_googleapis_webfonts_url', 'seosight_filter_fw_googleapis_webfonts_url');