2053 lines
76 KiB
PHP
2053 lines
76 KiB
PHP
<?php
|
||
/*
|
||
Plugin Name: Sitemap by BestWebSoft
|
||
Plugin URI: https://bestwebsoft.com/products/wordpress/plugins/google-sitemap/
|
||
Description: Generate and add XML sitemap to WordPress website. Help search engines index your blog.
|
||
Author: BestWebSoft
|
||
Text Domain: google-sitemap-plugin
|
||
Domain Path: /languages
|
||
Version: 3.2.6
|
||
Author URI: https://bestwebsoft.com/
|
||
License: GPLv2 or later
|
||
*/
|
||
|
||
/*
|
||
© Copyright 2021 BestWebSoft ( https://support.bestwebsoft.com )
|
||
|
||
This program is free software; you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License, version 2, as
|
||
published by the Free Software Foundation.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with this program; if not, write to the Free Software
|
||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||
*/
|
||
|
||
if ( ! function_exists( 'gglstmp_admin_menu' ) ) {
|
||
function gglstmp_admin_menu() {
|
||
if ( ! is_plugin_active( 'google-sitemap-pro/google-sitemap-pro.php' ) && ! is_plugin_active( 'google-sitemap-plus/google-sitemap-plus.php' ) ) {
|
||
global $gglstmp_options, $wp_version, $submenu, $gglstmp_plugin_info;
|
||
|
||
$settings = add_menu_page(
|
||
esc_html__( 'Sitemap Settings', 'google-sitemap-plugin' ),
|
||
'Sitemap',
|
||
'manage_options',
|
||
'google-sitemap-plugin.php',
|
||
'gglstmp_settings_page',
|
||
'none'
|
||
);
|
||
|
||
add_submenu_page(
|
||
'google-sitemap-plugin.php',
|
||
esc_html__( 'Sitemap Settings', 'google-sitemap-plugin' ),
|
||
esc_html__( 'Settings', 'google-sitemap-plugin' ),
|
||
'manage_options',
|
||
'google-sitemap-plugin.php',
|
||
'gglstmp_settings_page'
|
||
);
|
||
/*pls */
|
||
add_submenu_page( 'google-sitemap-plugin.php',
|
||
esc_html__( 'Custom Links', 'google-sitemap-plugin' ),
|
||
esc_html__( 'Custom Links', 'google-sitemap-plugin' ),
|
||
'manage_options',
|
||
'google-sitemap-custom-links.php',
|
||
'gglstmp_settings_page'
|
||
);
|
||
/* pls*/
|
||
|
||
add_submenu_page(
|
||
'google-sitemap-plugin.php',
|
||
'BWS Panel',
|
||
'BWS Panel',
|
||
'manage_options',
|
||
'gglstmp-bws-panel',
|
||
'bws_add_menu_render'
|
||
);
|
||
/*pls */
|
||
if ( isset( $submenu['google-sitemap-plugin.php'] ) ) {
|
||
$submenu['google-sitemap-plugin.php'][] = array(
|
||
'<span style="color:#d86463"> ' . esc_html__( 'Upgrade to Pro', 'google-sitemap-plugin' ) . '</span>',
|
||
'manage_options',
|
||
'https://bestwebsoft.com/products/wordpress/plugins/google-sitemap/?k=28d4cf0b4ab6f56e703f46f60d34d039&pn=83&v=' . $gglstmp_plugin_info["Version"] . '&wp_v=' . $wp_version
|
||
);
|
||
}
|
||
/* pls*/
|
||
|
||
add_action( "load-{$settings}", 'gglstmp_add_tabs' );
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_plugins_loaded' ) ) {
|
||
function gglstmp_plugins_loaded() {
|
||
/* Internationalization */
|
||
load_plugin_textdomain( 'google-sitemap-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
|
||
}
|
||
}
|
||
|
||
/* Function adds language files */
|
||
if ( ! function_exists( 'gglstmp_init' ) ) {
|
||
function gglstmp_init() {
|
||
global $gglstmp_plugin_info, $gglstmp_options;
|
||
|
||
if ( empty( $gglstmp_plugin_info ) ) {
|
||
if ( ! function_exists( 'get_plugin_data' ) ) {
|
||
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
||
}
|
||
$gglstmp_plugin_info = get_plugin_data( __FILE__ );
|
||
}
|
||
|
||
/* add general functions */
|
||
require_once( dirname( __FILE__ ) . '/bws_menu/bws_include.php' );
|
||
bws_include_init( plugin_basename( __FILE__ ) );
|
||
|
||
/* check compatible with current WP version */
|
||
bws_wp_min_version_check( plugin_basename( __FILE__ ), $gglstmp_plugin_info, '4.5' );
|
||
|
||
/* Get options from the database */
|
||
gglstmp_register_settings();
|
||
|
||
if ( 1 == get_option( 'gglstmp_robots' ) ) {
|
||
add_filter( 'robots_txt', 'gglstmp_robots_add_sitemap', 10, 2 );
|
||
}
|
||
|
||
if ( isset( $_GET['gglstmp_robots'] ) ) {
|
||
$robots_txt_url = ABSPATH . 'robots.txt';
|
||
/* Get content from real robots.txt file and output its content + custom content */
|
||
if ( file_exists( $robots_txt_url ) ) {
|
||
$robots_content = file_get_contents( $robots_txt_url );
|
||
$robots_content .= "\n";
|
||
$public = get_option( 'blog_public' );
|
||
header( 'Content-Type: text/plain; charset=utf-8' );
|
||
echo apply_filters( 'robots_txt', $robots_content, $public );
|
||
exit;
|
||
}
|
||
}
|
||
|
||
if ( 1 == $gglstmp_options['media_sitemap'] ) {
|
||
$sitemaps_type = array( 'video_sitemap', 'image_sitemap', 'sitemap' );
|
||
} else {
|
||
$sitemaps_type = array( 'sitemap' );
|
||
}
|
||
|
||
/* check for file existence and call refresh function */
|
||
if ( is_multisite() ) {
|
||
$blog_id = get_current_blog_id();
|
||
foreach ( $sitemaps_type as $sitemap ) {
|
||
$filename = "{$sitemap}_{$blog_id}.xml";
|
||
if ( ! file_exists( ABSPATH . $filename ) ) {
|
||
$sitemap_recreate = true;
|
||
}
|
||
}
|
||
} else {
|
||
foreach ( $sitemaps_type as $sitemap ) {
|
||
$filename = "{$sitemap}.xml";
|
||
if ( ! file_exists( ABSPATH . $filename ) ) {
|
||
$sitemap_recreate = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( isset( $sitemap_recreate ) ) {
|
||
gglstmp_schedule_sitemap( false, false, true );
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_admin_init' ) ) {
|
||
function gglstmp_admin_init() {
|
||
/* Add variable for bws_menu */
|
||
global $pagenow, $bws_plugin_info, $gglstmp_plugin_info, $gglstmp_options;
|
||
|
||
if ( empty( $bws_plugin_info ) ) {
|
||
$bws_plugin_info = array( 'id' => '83', 'version' => $gglstmp_plugin_info["Version"] );
|
||
}
|
||
|
||
if ( isset( $_GET['page'] ) && "google-sitemap-plugin.php" == $_GET['page'] ) {
|
||
if ( ! session_id() ) {
|
||
session_start();
|
||
}
|
||
}
|
||
/*pls */
|
||
if ( 'plugins.php' == $pagenow ) {
|
||
if ( function_exists( 'bws_plugin_banner_go_pro' ) )
|
||
bws_plugin_banner_go_pro( $gglstmp_options, $gglstmp_plugin_info, 'gglstmp', 'google-sitemap', '8fbb5d23fd00bdcb213d6c0985d16ec5', '83', 'google-sitemap-plugin' );
|
||
}
|
||
/* pls*/
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_activate' ) ) {
|
||
function gglstmp_activate() {
|
||
if ( is_multisite() ) {
|
||
switch_to_blog( 1 );
|
||
/* register uninstall function only for the main blog */
|
||
register_uninstall_hook( __FILE__, 'gglstmp_delete_settings' );
|
||
restore_current_blog();
|
||
} else {
|
||
/* register uninstall function */
|
||
register_uninstall_hook( __FILE__, 'gglstmp_delete_settings' );
|
||
}
|
||
}
|
||
}
|
||
|
||
/*============================================ Function for register of the plugin settings on init core ====================*/
|
||
if ( ! function_exists( 'gglstmp_register_settings' ) ) {
|
||
function gglstmp_register_settings() {
|
||
global $gglstmp_options, $gglstmp_plugin_info;
|
||
|
||
if ( ! get_option( 'gglstmp_options' ) ) {
|
||
$sitemaprecreate = true;
|
||
$options_default = gglstmp_get_options_default();
|
||
add_option( 'gglstmp_options', $options_default );
|
||
}
|
||
|
||
$gglstmp_options = get_option( 'gglstmp_options' );
|
||
|
||
if ( ! isset( $gglstmp_options['plugin_option_version'] ) || $gglstmp_options['plugin_option_version'] != $gglstmp_plugin_info['Version'] ) {
|
||
$options_default = gglstmp_get_options_default();
|
||
$gglstmp_options = array_merge( $options_default, $gglstmp_options );
|
||
/**
|
||
* Register uninstall hook
|
||
*/
|
||
if ( ! isset( $gglstmp_options['plugin_option_version'] ) || version_compare( str_replace( 'pro-', '', $gglstmp_options['plugin_option_version'] ), '3.1.0', '<' ) ) {
|
||
unset( $gglstmp_options['sitemap'] );
|
||
gglstmp_activate();
|
||
}
|
||
|
||
$gglstmp_options['plugin_option_version'] = $gglstmp_plugin_info["Version"];
|
||
|
||
/* show pro features */
|
||
$gglstmp_options['hide_premium_options'] = array();
|
||
update_option( 'gglstmp_options', $gglstmp_options );
|
||
}
|
||
|
||
if ( isset( $sitemaprecreate ) ) {
|
||
gglstmp_schedule_sitemap();
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_get_options_default' ) ) {
|
||
function gglstmp_get_options_default() {
|
||
global $gglstmp_plugin_info;
|
||
|
||
$options_default = array(
|
||
'plugin_option_version' => $gglstmp_plugin_info['Version'],
|
||
'first_install' => strtotime( "now" ),
|
||
'display_settings_notice' => 1,
|
||
'suggest_feature_banner' => 1,
|
||
'post_type' => array( 'page', 'post' ),
|
||
'taxonomy' => array(),
|
||
'limit' => 50000,
|
||
'sitemap_cron_delay' => 600, /* delay in seconds to next cron */
|
||
'sitemaps' => array(),
|
||
'alternate_language' => 0,
|
||
'media_sitemap' => 0
|
||
);
|
||
|
||
$frequency = apply_filters( 'gglstmp_get_frequency_default', array() );
|
||
$options_default = array_merge( $options_default, $frequency );
|
||
return $options_default;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.1
|
||
* Update sitemap on permalink structure update.
|
||
*
|
||
* @param array $rules array of existing rules. No modification is needed.
|
||
*
|
||
* @return array $rules
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_rewrite_rules' ) ) {
|
||
function gglstmp_rewrite_rules( $rules ) {
|
||
gglstmp_schedule_sitemap();
|
||
|
||
return $rules;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Schedules sitemap preparing task for specified blog.
|
||
*
|
||
* @param mixed $blog_id (int)The blog id the sitemap is created for. Default is false - for current blog.
|
||
* @param bool $no_cron Set if sitemap creation would be executed using cron. Default is false.
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_schedule_sitemap' ) ) {
|
||
function gglstmp_schedule_sitemap( $blog_id = false, $no_cron = false, $now = false ) {
|
||
global $gglstmp_options;
|
||
|
||
if ( empty( $blog_id ) ) {
|
||
$blog_id = get_current_blog_id();
|
||
}
|
||
|
||
if ( $no_cron || ! isset( $gglstmp_options['link_count'] ) || $gglstmp_options['link_count'] < 10000 ) {
|
||
gglstmp_prepare_sitemap( $blog_id );
|
||
} else {
|
||
if ( $now ) {
|
||
wp_schedule_single_event( time(), 'gglstmp_sitemap_cron', array( $blog_id ) );
|
||
} else {
|
||
wp_schedule_single_event( time() + absint( $gglstmp_options['sitemap_cron_delay'] ), 'gglstmp_sitemap_cron', array( $blog_id ) );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_edited_term' ) ) {
|
||
function gglstmp_edited_term( $term_id, $tt_id, $taxonomy ) {
|
||
if ( isset( $taxonomy ) && 'nav_menu' != $taxonomy ) {
|
||
gglstmp_schedule_sitemap();
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Function prepares all the items that should be included into blog's sitemap.
|
||
* After array of items is prepared, it is divided into multiple parts according to the limit value.
|
||
* A single sitemap file will be created if the limit isn't reached,
|
||
* otherwise sitemap file for each part of array of items will be created. Blog index file would be created also.
|
||
* If multisite network is used, network index file will be created also.
|
||
*
|
||
* @param mixed $blog_id (int)The blog id the sitemap is created for. Default is false - for current blog.
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_prepare_sitemap' ) ) {
|
||
function gglstmp_prepare_sitemap( $blog_id = false ) {
|
||
global $wpdb, $gglstmp_options;
|
||
|
||
$old_blog = $wpdb->blogid;
|
||
|
||
$counter = 0;
|
||
$part_num = 1;
|
||
$elements = array();
|
||
$image_elements = array();
|
||
$video_elements = array();
|
||
$is_multisite = is_multisite();
|
||
|
||
if ( $is_multisite && ! empty( $blog_id ) ) {
|
||
switch_to_blog( absint( $blog_id ) );
|
||
} else {
|
||
$blog_id = get_current_blog_id();
|
||
}
|
||
|
||
$gglstmp_options = get_option( 'gglstmp_options' );
|
||
|
||
$post_types = get_post_types( array( 'public' => true ) );
|
||
/* get all posts */
|
||
|
||
foreach ( $post_types as $post_type => $post_type_object ) {
|
||
if ( ! in_array( $post_type, $gglstmp_options['post_type'] ) ) {
|
||
unset( $post_types[ $post_type ] );
|
||
}
|
||
}
|
||
|
||
$post_status = apply_filters( 'gglstmp_post_status', array( 'publish' ) );
|
||
|
||
$excluded_posts = $wpdb->get_col( "
|
||
SELECT
|
||
`ID`
|
||
FROM $wpdb->posts
|
||
WHERE
|
||
`post_status` IN ('hidden', 'private')
|
||
" );
|
||
|
||
if ( ! empty( $excluded_posts ) ) {
|
||
while ( true ) {
|
||
/* exclude bbPress forums and topics */
|
||
$hidden_child_array = $wpdb->get_col(
|
||
"SELECT
|
||
`ID`
|
||
FROM $wpdb->posts
|
||
WHERE
|
||
`post_status` IN ('" . implode( "','", $post_status ) . "')
|
||
AND `ID` NOT IN (" . implode( ',', $excluded_posts ) . ")
|
||
AND `post_type` IN ('forum', 'topic', 'reply')
|
||
AND `post_parent` IN (" . implode( ',', $excluded_posts ) . ");"
|
||
);
|
||
|
||
if ( ! empty( $hidden_child_array ) ) {
|
||
$excluded_posts = array_unique( array_merge( $excluded_posts, $hidden_child_array ) );
|
||
} else {
|
||
break 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
/* get all taxonomies */
|
||
$taxonomies = array(
|
||
'category' => esc_html__( 'Post categories', 'google-sitemap-plugin' ),
|
||
'post_tag' => esc_html__( 'Post tags', 'google-sitemap-plugin' )
|
||
);
|
||
|
||
foreach ( $taxonomies as $key => $taxonomy_name ) {
|
||
if ( ! in_array( $key, $gglstmp_options['taxonomy'] ) ) {
|
||
unset( $taxonomies[ $key ] );
|
||
}
|
||
}
|
||
|
||
/* add home page */
|
||
$show_on_front = ! ! ( 'page' == get_option( 'show_on_front' ) );
|
||
$frontpage_id = get_option( 'page_on_front' );
|
||
$frontpage_is_added = false;
|
||
|
||
$frequency = apply_filters( 'gglstmp_get_frequency', 'monthly' );
|
||
|
||
if ( ! empty( $post_types ) ) {
|
||
$post_status_string = "p.`post_status` IN ('" . implode( "','", (array) $post_status ) . "')";
|
||
|
||
$excluded_posts_string = $post_types_string = '';
|
||
|
||
$post_types_string = "AND p.`post_type` IN ('" . implode( "','", (array) $post_types ) . "')";
|
||
|
||
if ( ! empty( $excluded_posts ) ) {
|
||
$excluded_posts_string = "AND p.`ID` NOT IN (" . implode( ",", $excluded_posts ) . ")";
|
||
}
|
||
|
||
// get the number of posts for sitemap
|
||
$count_posts = $wpdb->query( "
|
||
SELECT COUNT( * )
|
||
FROM `{$wpdb->posts}` p
|
||
LEFT JOIN {$wpdb->term_relationships} tr
|
||
ON p.`ID` = tr.`object_id`
|
||
LEFT JOIN {$wpdb->term_taxonomy} tt
|
||
ON tt.`term_taxonomy_id` = tr.`term_taxonomy_id`
|
||
LEFT JOIN {$wpdb->terms} t
|
||
ON t.`term_id` = tt.`term_id`
|
||
WHERE
|
||
{$post_status_string}
|
||
{$post_types_string}
|
||
{$excluded_posts_string}
|
||
GROUP BY `ID`
|
||
" );
|
||
|
||
// count the number of iterations needed
|
||
$counter = ( int ) ceil( $count_posts / 5000 );
|
||
|
||
// loop to limit 5000 posts for iteration
|
||
for (
|
||
$i = 0, $offset = 0, $limit = 5000;
|
||
$i < $counter;
|
||
$i++, $offset += 5000
|
||
) {
|
||
$posts = $wpdb->get_results(
|
||
"SELECT
|
||
`ID`,
|
||
`post_author`,
|
||
`post_status`,
|
||
`post_name`,
|
||
`post_parent`,
|
||
`post_type`,
|
||
`post_date`,
|
||
`post_date_gmt`,
|
||
`post_modified`,
|
||
`post_modified_gmt`,
|
||
GROUP_CONCAT(t.`term_id`) as term_id
|
||
FROM `{$wpdb->posts}` p
|
||
LEFT JOIN {$wpdb->term_relationships} tr
|
||
ON p.`ID` = tr.`object_id`
|
||
LEFT JOIN {$wpdb->term_taxonomy} tt
|
||
ON tt.`term_taxonomy_id` = tr.`term_taxonomy_id`
|
||
LEFT JOIN {$wpdb->terms} t
|
||
ON t.`term_id` = tt.`term_id`
|
||
WHERE
|
||
{$post_status_string}
|
||
{$post_types_string}
|
||
{$excluded_posts_string}
|
||
GROUP BY `ID`
|
||
ORDER BY `post_date_gmt` DESC LIMIT {$offset}, {$limit};"
|
||
);
|
||
|
||
if ( ! empty( $posts ) ) {
|
||
foreach ( $posts as $post ) {
|
||
$priority = 0.8;
|
||
if ( $show_on_front && $frontpage_id == $post->ID ) {
|
||
$priority = 1.0;
|
||
$frontpage_is_added = true;
|
||
}
|
||
|
||
if ( $gglstmp_options['media_sitemap'] ) {
|
||
|
||
/* Prepear image_list data for sitemap */
|
||
$image_list = get_attached_media( 'image', $post );
|
||
|
||
/* Add image to list */
|
||
$image_item = array();
|
||
|
||
if ( ! empty( $image_list ) ) {
|
||
$image_count = 0;
|
||
foreach ( $image_list as $image ) {
|
||
$image_count ++;
|
||
if ( $image_count > 1000 ) {
|
||
break;
|
||
}
|
||
$attachment_metadata = wp_get_attachment_metadata( $image->ID );
|
||
|
||
$explode_metadata = explode( '/', $attachment_metadata['file'] );
|
||
$image_guid = array_pop( $explode_metadata );
|
||
$image_upload_date = implode( ' ', $explode_metadata );
|
||
|
||
$check_img_exists = gglstmp_if_file_exists( $image_guid, $image_upload_date );
|
||
if ( $check_img_exists ) {
|
||
$image_url = wp_get_attachment_image_url( $image->ID );
|
||
$pos_extensions = strrpos( $image->post_title, '.' );
|
||
$image_title = ( ( $pos_extensions === false ) ? ( $image->post_title ) : substr ( $image->post_title, 0, $pos_extensions ) );
|
||
$image_item[] = array( 'guid' => $image_url, 'image_title' => $image_title );
|
||
}
|
||
}
|
||
/* Add array image_elements of one post */
|
||
$image_elements[] = array(
|
||
'url' => get_permalink( $post ),
|
||
'image_list' => $image_item
|
||
);
|
||
}
|
||
}
|
||
|
||
/* Data for default sitemap */
|
||
$elements[] = array(
|
||
'url' => get_permalink( $post ),
|
||
'date' => date( 'Y-m-d\TH:i:sP', strtotime( $post->post_modified ) ),
|
||
'frequency' => $frequency,
|
||
'priority' => $priority
|
||
);
|
||
}
|
||
}
|
||
/* Prepear video_list data for sitemap */
|
||
$attachments = get_posts( array( 'post_type' => 'attachment' ) );
|
||
$video_item = array();
|
||
if ( ! empty( $posts ) ) {
|
||
$video_count = 0;
|
||
foreach ( $attachments as $video ) {
|
||
if ( str_contains( $video->post_mime_type, 'video' ) ) {
|
||
/* Add video to list */
|
||
$video_count ++;
|
||
if ( $video_count > 1000 ) {
|
||
break;
|
||
}
|
||
$video_info[] = $video->guid;
|
||
$video_info[] = $video->post_title;
|
||
$video_item[] = $video_info;
|
||
|
||
if ( ! in_array( get_permalink( $video ), array_column( $video_elements, 'url' ) ) ) {
|
||
$video_elements[] = array(
|
||
'url' => get_permalink( $video ),
|
||
'video_list_url' => $video_item
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! $frontpage_is_added ) {
|
||
$elements[] = array(
|
||
'url' => home_url( '/' ),
|
||
'date' => date( 'Y-m-d\TH:i:sP', time() ),
|
||
'frequency' => $frequency,
|
||
'priority' => 1.0
|
||
);
|
||
}
|
||
|
||
if ( ! empty( $taxonomies ) ) {
|
||
foreach ( $taxonomies as $taxonomy => $taxonomy_data ) {
|
||
$terms = get_terms( $taxonomy, 'hide_empty=1' );
|
||
|
||
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
|
||
foreach ( $terms as $term_value ) {
|
||
$modified = $wpdb->get_var( "SELECT `post_modified` FROM $wpdb->posts, $wpdb->term_relationships WHERE `post_status` = 'publish' AND `term_taxonomy_id` = " . $term_value->term_taxonomy_id . " AND $wpdb->posts.ID= $wpdb->term_relationships.object_id ORDER BY `post_modified` DESC" );
|
||
$elements[] = array(
|
||
'url' => get_term_link( (int) $term_value->term_id, $taxonomy ),
|
||
'date' => date( 'Y-m-d\TH:i:sP', strtotime( $modified ) ),
|
||
'frequency' => $frequency,
|
||
'priority' => 0.8
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* removing existing sitemap and sitemap_index files for current blog */
|
||
$existing_files = gglstmp_get_sitemap_files();
|
||
array_map( "unlink", $existing_files );
|
||
|
||
$gglstmp_options['sitemaps'] = array();
|
||
$gglstmp_options['link_count'] = count( $elements );
|
||
|
||
/* create sitemap */
|
||
if ( $gglstmp_options['media_sitemap'] ) {
|
||
/* standard sitemap with link */
|
||
if ( count( $elements ) <= $gglstmp_options['limit'] ) {
|
||
$part_num = 0;
|
||
gglstmp_create_sitemap( $elements, $part_num );
|
||
} else {
|
||
$parts = array_chunk( $elements, $gglstmp_options['limit'] );
|
||
foreach ( $parts as $part_num => $part_elements ) {
|
||
gglstmp_create_sitemap( $part_elements, $part_num + 1 );
|
||
}
|
||
}
|
||
/* checking image_sitemap */
|
||
if ( count( $image_elements ) <= $gglstmp_options['limit'] ) {
|
||
$image_part_num = 0;
|
||
gglstmp_create_image_sitemap( $image_elements, $image_part_num );
|
||
} else {
|
||
$parts_image = array_chunk( $image_elements, $gglstmp_options['limit'] );
|
||
foreach ( $parts_image as $image_part_num => $part_image_elements ) {
|
||
gglstmp_create_image_sitemap( $part_image_elements, $image_part_num + 1 );
|
||
}
|
||
}
|
||
/* checking video_sitemap */
|
||
if ( count( $video_elements ) <= $gglstmp_options['limit'] ) {
|
||
$video_part_num = 0;
|
||
gglstmp_create_video_sitemap( $video_elements, $video_part_num );
|
||
} else {
|
||
$parts_video = array_chunk( $video_elements, $gglstmp_options['limit'] );
|
||
foreach ( $parts_video as $video_part_num => $part_video_elements ) {
|
||
gglstmp_create_video_sitemap( $part_video_elements, $video_part_num + 1 );
|
||
}
|
||
}
|
||
gglstmp_create_sitemap_index();
|
||
} else {
|
||
if ( count( $elements ) <= $gglstmp_options['limit'] ) {
|
||
$part_num = 0;
|
||
gglstmp_create_sitemap( $elements, $part_num );
|
||
} else {
|
||
$parts = array_chunk( $elements, $gglstmp_options['limit'] );
|
||
foreach ( $parts as $part_num => $part_elements ) {
|
||
gglstmp_create_sitemap( $part_elements, $part_num + 1 );
|
||
}
|
||
gglstmp_create_sitemap_index();
|
||
}
|
||
}
|
||
|
||
if ( $is_multisite ) {
|
||
/* removing main index file */
|
||
$existing_files = gglstmp_get_sitemap_files( 0 );
|
||
if ( ! $gglstmp_options['media_sitemap'] ) {
|
||
array_map( "unlink", $existing_files );
|
||
}
|
||
/* Create main network sitemap index file. Only for subfolder structure, as index sitemap cannot contain sitemaps located on different domain/subdomain. */
|
||
gglstmp_create_sitemap_index( 0 );
|
||
}
|
||
/**
|
||
* Options update is necessary because 'gglstmp_create_sitemap' and 'gglstmp_create_sitemap_index' functions
|
||
* have modified $gglstmp_options global variable by calling 'gglstmp_save_sitemap_info' function
|
||
*/
|
||
|
||
update_option( 'gglstmp_options', $gglstmp_options );
|
||
if ( $is_multisite ) {
|
||
switch_to_blog( $old_blog );
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Function creates xml sitemap file with the provided list of elements.
|
||
* Global variables are used and function mltlngg_get_lang_link() is called from the plugin Multilanguage.
|
||
* Filename is generated in the following way:
|
||
* On a single site:
|
||
* a) $part_num isn't set: "sitemap.xml"
|
||
* b) $part_num is set and equals 2: "sitemap_2.xml".
|
||
* On single subsite of multisite network, $blog_id == 1:
|
||
* a) $part_num isn't set: "sitemap_1.xml"
|
||
* b) $part_num is set and equals 2: "sitemap_1_2.xml".
|
||
*
|
||
* @param array $elements An array of elements to include to the sitemap.
|
||
* @param int $part_num (optional) Indicates the number of the part of elements. It is included to the sitemap filename.
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_create_sitemap' ) ) {
|
||
function gglstmp_create_sitemap( $elements, $part_num = 0 ) {
|
||
global $blog_id, $mltlngg_languages, $mltlngg_enabled_languages, $gglstmp_options;
|
||
|
||
$xml = new DomDocument( '1.0', 'utf-8' );
|
||
$home_url = site_url( '/' );
|
||
$xml_stylesheet_path = ( defined( 'WP_CONTENT_DIR' ) ) ? $home_url . basename( WP_CONTENT_DIR ) : $home_url . 'wp-content';
|
||
$xml_stylesheet_path .= ( defined( 'WP_PLUGIN_DIR' ) ) ? '/' . basename( WP_PLUGIN_DIR ) . '/google-sitemap-plugin/sitemap.xsl' : '/plugins/google-sitemap-plugin/sitemap.xsl';
|
||
$xslt = $xml->createProcessingInstruction( 'xml-stylesheet', "type=\"text/xsl\" href=\"$xml_stylesheet_path\"" );
|
||
$xml->appendChild( $xslt );
|
||
$urlset = $xml->appendChild( $xml->createElementNS( 'http://www.sitemaps.org/schemas/sitemap/0.9', 'urlset' ) );
|
||
|
||
/* Used to check compatibility and work with the plugin Multilanguage*/
|
||
$count_lang = empty( $mltlngg_enabled_languages ) ? '' : count( $mltlngg_enabled_languages );
|
||
$compatibility = false;
|
||
if ( ! empty( $gglstmp_options['alternate_language'] ) && ( '' != $count_lang ) ) {
|
||
$compatibility = true;
|
||
}
|
||
|
||
/* Create an array with active languages and add a value for hreflang */
|
||
$enabled_languages = array();
|
||
if ( $compatibility ) {
|
||
$urlset->setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns:xhtml', 'http://www.w3.org/1999/xhtml' );
|
||
|
||
foreach ( $mltlngg_enabled_languages as $language ) {
|
||
foreach ( $mltlngg_languages as $item ) {
|
||
if ( $language['name'] == $item[2] ) {
|
||
$language['lang'] = $item[0];
|
||
$enabled_languages[ $item[2] ] = $language;
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( function_exists( 'mltlngg_get_lang_link' ) ) {
|
||
$lang_link = 'mltlngg_get_lang_link';
|
||
}
|
||
$args_links = array();
|
||
}
|
||
|
||
foreach ( $elements as $element ) {
|
||
if ( $compatibility ) {
|
||
foreach ( $enabled_languages as $language ) {
|
||
$args_links["lang"] = $language["locale"];
|
||
$args_links["url"] = $element["url"];
|
||
|
||
$url = $urlset->appendChild( $xml->createElement( 'url' ) );
|
||
$loc = $url->appendChild( $xml->createElement( 'loc' ) );
|
||
$loc->appendChild( $xml->createTextNode( $lang_link( $args_links ) ) );
|
||
|
||
foreach ( $enabled_languages as $language ) {
|
||
$args_links["lang"] = $language["locale"];
|
||
$link = $url->appendChild( $xml->createElement( 'xhtml:link' ) );
|
||
$link->setAttribute( "rel", "alternate" );
|
||
$link->setAttribute( "hreflang", $language['lang'] );
|
||
$link->setAttribute( "href", $lang_link( $args_links ) );
|
||
}
|
||
|
||
$lastmod = $url->appendChild( $xml->createElement( 'lastmod' ) );
|
||
$lastmod->appendChild( $xml->createTextNode( $element['date'] ) );
|
||
$changefreq = $url->appendChild( $xml->createElement( 'changefreq' ) );
|
||
$changefreq->appendChild( $xml->createTextNode( $element['frequency'] ) );
|
||
$priority = $url->appendChild( $xml->createElement( 'priority' ) );
|
||
$priority->appendChild( $xml->createTextNode( $element['priority'] ) );
|
||
}
|
||
} else {
|
||
$url = $urlset->appendChild( $xml->createElement( 'url' ) );
|
||
$loc = $url->appendChild( $xml->createElement( 'loc' ) );
|
||
$loc->appendChild( $xml->createTextNode( $element['url'] ) );
|
||
$lastmod = $url->appendChild( $xml->createElement( 'lastmod' ) );
|
||
$lastmod->appendChild( $xml->createTextNode( $element['date'] ) );
|
||
$changefreq = $url->appendChild( $xml->createElement( 'changefreq' ) );
|
||
$changefreq->appendChild( $xml->createTextNode( $element['frequency'] ) );
|
||
$priority = $url->appendChild( $xml->createElement( 'priority' ) );
|
||
$priority->appendChild( $xml->createTextNode( $element['priority'] ) );
|
||
}
|
||
}
|
||
|
||
$xml->formatOutput = true;
|
||
|
||
if ( ! is_writable( ABSPATH ) ) {
|
||
@chmod( ABSPATH, 0755 );
|
||
}
|
||
|
||
$part_num = ( absint( $part_num ) > 0 ) ? '_' . absint( $part_num ) : '';
|
||
|
||
|
||
if ( $gglstmp_options['media_sitemap'] ) {
|
||
if ( is_multisite() ) {
|
||
$filename = 'default_sitemap_' . absint( $blog_id ) . $part_num . '.xml';
|
||
} else {
|
||
$filename = 'default_sitemap' . $part_num . '.xml';
|
||
}
|
||
} else {
|
||
if ( is_multisite() ) {
|
||
$filename = 'sitemap_' . absint( $blog_id ) . $part_num . '.xml';
|
||
} else {
|
||
$filename = 'sitemap' . $part_num . '.xml';
|
||
}
|
||
}
|
||
|
||
$xml->save( ABSPATH . $filename );
|
||
gglstmp_save_sitemap_info( $filename );
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_create_image_sitemap' ) ) {
|
||
function gglstmp_create_image_sitemap( $elements, $part_num = 0 ) {
|
||
global $blog_id, $mltlngg_languages, $mltlngg_enabled_languages, $gglstmp_options;
|
||
|
||
$xml = new DomDocument( '1.0', 'utf-8' );
|
||
$home_url = site_url( '/' );
|
||
$xml_stylesheet_path = ( defined( 'WP_CONTENT_DIR' ) ) ? $home_url . basename( WP_CONTENT_DIR ) : $home_url . 'wp-content';
|
||
$xml_stylesheet_path .= ( defined( 'WP_PLUGIN_DIR' ) ) ? '/' . basename( WP_PLUGIN_DIR ) . '/google-sitemap-plugin/image_sitemap.xsl' : '/plugins/google-sitemap-plugin/image_sitemap.xsl'; // добавить путь с xsl файлу оформления sitemap
|
||
$xslt = $xml->createProcessingInstruction( 'xml-stylesheet', "type=\"text/xsl\" href=\"$xml_stylesheet_path\"" );
|
||
$xml->appendChild( $xslt );
|
||
$urlset = $xml->appendChild( $xml->createElementNS( 'http://www.sitemaps.org/schemas/sitemap/0.9', 'urlset' ) );
|
||
|
||
/* Add namespace for image_sitemap */
|
||
$img_spacename = $xml->createAttribute( 'xmlns:image' );
|
||
$img_spacename->value = 'http://www.google.com/schemas/sitemap-image/1.1';
|
||
$urlset->appendChild( $img_spacename );
|
||
|
||
/* Used to check compatibility and work with the plugin Multilanguage */
|
||
$count_lang = empty( $mltlngg_enabled_languages ) ? '' : count( $mltlngg_enabled_languages );
|
||
$compatibility = false;
|
||
if ( ! empty( $gglstmp_options['alternate_language'] ) && ( '' != $count_lang ) ) {
|
||
$compatibility = true;
|
||
}
|
||
|
||
/* Create an array with active languages and add a value for hreflang */
|
||
$enabled_languages = array();
|
||
if ( $compatibility ) {
|
||
$urlset->setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns:xhtml', 'http://www.w3.org/1999/xhtml' );
|
||
|
||
foreach ( $mltlngg_enabled_languages as $language ) {
|
||
foreach ( $mltlngg_languages as $item ) {
|
||
if ( $language['name'] == $item[2] ) {
|
||
$language['lang'] = $item[0];
|
||
$enabled_languages[ $item[2] ] = $language;
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( function_exists( 'mltlngg_get_lang_link' ) ) {
|
||
$lang_link = 'mltlngg_get_lang_link';
|
||
}
|
||
$args_links = array();
|
||
}
|
||
|
||
foreach ( $elements as $element ) {
|
||
if ( $compatibility ) {
|
||
foreach ( $enabled_languages as $language ) {
|
||
$args_links["lang"] = $language["locale"];
|
||
$args_links["url"] = $element["url"];
|
||
|
||
$url = $urlset->appendChild( $xml->createElement( 'url' ) );
|
||
$loc = $url->appendChild( $xml->createElement( 'loc' ) );
|
||
$loc->appendChild( $xml->createTextNode( $lang_link( $args_links ) ) );
|
||
|
||
foreach ( $enabled_languages as $language ) {
|
||
$args_links["lang"] = $language["locale"];
|
||
$link = $url->appendChild( $xml->createElement( 'xhtml:link' ) );
|
||
$link->setAttribute( "rel", "alternate" );
|
||
$link->setAttribute( "hreflang", $language['lang'] );
|
||
$link->setAttribute( "href", $lang_link( $args_links ) );
|
||
}
|
||
|
||
if ( ! empty( $element['image_list'] ) ) {
|
||
foreach ( $element['image_list'] as $image_it ) {
|
||
$image = $url->appendChild( $xml->createElement( 'image:image' ) );
|
||
|
||
/* image title */
|
||
$image_title = $image->appendChild( $xml->createElement( 'image:title' ) );
|
||
$image_title->appendChild( $xml->createTextNode( $image_it['image_title'] ) );
|
||
|
||
/* image loc */
|
||
$image_loc = $image->appendChild( $xml->createElement( 'image:loc' ) );
|
||
$image_loc->appendChild( $xml->createTextNode( $image_it['guid'] ) );
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
$url = $urlset->appendChild( $xml->createElement( 'url' ) );
|
||
$loc = $url->appendChild( $xml->createElement( 'loc' ) );
|
||
$loc->appendChild( $xml->createTextNode( $element['url'] ) );
|
||
|
||
if ( ! empty( $element['image_list'] ) ) {
|
||
foreach ( $element['image_list'] as $image_it ) {
|
||
|
||
$image = $url->appendChild( $xml->createElement( 'image:image' ) );
|
||
|
||
/* image title */
|
||
$image_title = $image->appendChild( $xml->createElement( 'image:title' ) );
|
||
$image_title->appendChild( $xml->createTextNode( $image_it['image_title'] ) );
|
||
|
||
/* image loc */
|
||
$image_loc = $image->appendChild( $xml->createElement( 'image:loc' ) );
|
||
$image_loc->appendChild( $xml->createTextNode( $image_it['guid'] ) );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$xml->formatOutput = true;
|
||
|
||
if ( ! is_writable( ABSPATH ) ) {
|
||
@chmod( ABSPATH, 0755 );
|
||
}
|
||
|
||
$part_num = ( absint( $part_num ) > 0 ) ? '_' . absint( $part_num ) : '';
|
||
|
||
if ( is_multisite() ) {
|
||
$filename = 'image_sitemap_' . absint( $blog_id ) . $part_num . '.xml';
|
||
} else {
|
||
$filename = 'image_sitemap' . $part_num . '.xml';
|
||
}
|
||
$xml->save( ABSPATH . $filename );
|
||
gglstmp_save_sitemap_info( $filename );
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_if_file_exists' ) ) {
|
||
function gglstmp_if_file_exists( $filename, $time_dir = null, $format = '', $echo = true, $dir = '', $show_if_not_exists = '' ) {
|
||
$error = false;
|
||
$path = '';
|
||
$abspath = ltrim( ABSPATH, '/' );
|
||
|
||
if ( ! is_bool( $dir ) ) {
|
||
$dir = trim( trim( str_replace( $abspath, '', $dir ) ), '/' );
|
||
}
|
||
|
||
if ( false === $dir || empty( $dir ) ) {
|
||
$uploads = wp_upload_dir( $time_dir );
|
||
if ( isset( $uploads['error'] ) && ! empty( $uploads['error'] ) ) {
|
||
$error = true;
|
||
} else {
|
||
$path = $uploads['path'];
|
||
$dir = str_replace( $abspath, '', $path );
|
||
}
|
||
} elseif ( true === $dir ) {
|
||
// If $dir is set to true, then $filename is already the full path
|
||
$path = dirname( $filename );
|
||
$filename = basename( $filename );
|
||
$dir = str_replace( ABSPATH, '', $path );
|
||
} else {
|
||
$path = ABSPATH . $dir;
|
||
}
|
||
|
||
$full_path = $path . '/' . $filename;
|
||
|
||
$exists = ( $error || empty( $filename ) ) ? false : file_exists( $full_path );
|
||
|
||
if ( empty( $format ) ) {
|
||
$format = $exists;
|
||
$echo = false;
|
||
} else {
|
||
if ( ! $exists ) {
|
||
$format = $show_if_not_exists;
|
||
}
|
||
|
||
if ( $format ) {
|
||
$pathparts = pathinfo( $full_path );
|
||
$tags = array(
|
||
'%file_directory%' => $pathparts['dirname'],
|
||
'%file_extension%' => isset( $pathparts['extension'] ) ? $pathparts['extension'] : '',
|
||
'%file_name%' => $pathparts['basename'],
|
||
'%file_path%' => $full_path,
|
||
'%file_url%' => site_url() . '/' . $dir . '/' . $filename
|
||
);
|
||
|
||
foreach ( $tags as $tag => $new ) {
|
||
$format = str_replace( $tag, $new, $format );
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( $echo ) {
|
||
echo esc_attr( $format );
|
||
}
|
||
|
||
return $format;
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_create_video_sitemap' ) ) {
|
||
function gglstmp_create_video_sitemap( $elements, $part_num = 0 ) {
|
||
global $blog_id, $mltlngg_languages, $mltlngg_enabled_languages, $gglstmp_options;
|
||
|
||
$xml = new DomDocument( '1.0', 'utf-8' );
|
||
$home_url = site_url( '/' );
|
||
$xml_stylesheet_path = ( defined( 'WP_CONTENT_DIR' ) ) ? $home_url . basename( WP_CONTENT_DIR ) : $home_url . 'wp-content';
|
||
$xml_stylesheet_path .= ( defined( 'WP_PLUGIN_DIR' ) ) ? '/' . basename( WP_PLUGIN_DIR ) . '/google-sitemap-plugin/video_sitemap.xsl' : '/plugins/google-sitemap-plugin/video_sitemap.xsl';
|
||
$xslt = $xml->createProcessingInstruction( 'xml-stylesheet', "type=\"text/xsl\" href=\"$xml_stylesheet_path\"" );
|
||
$xml->appendChild( $xslt );
|
||
$urlset = $xml->appendChild( $xml->createElementNS( 'http://www.sitemaps.org/schemas/sitemap/0.9', 'urlset' ) );
|
||
|
||
/* Add namespace for video_sitemap */
|
||
$video_spacename = $xml->createAttribute( 'xmlns:video' );
|
||
$video_spacename->value = 'http://www.google.com/schemas/sitemap-video/1.1';
|
||
$urlset->appendChild( $video_spacename );
|
||
|
||
/* Used to check compatibility and work with the plugin Multilanguage */
|
||
$count_lang = empty( $mltlngg_enabled_languages ) ? '' : count( $mltlngg_enabled_languages );
|
||
$compatibility = false;
|
||
if ( ! empty( $gglstmp_options['alternate_language'] ) && ( '' != $count_lang ) ) {
|
||
$compatibility = true;
|
||
}
|
||
|
||
/* Create an array with active languages and add a value for hreflang */
|
||
$enabled_languages = array();
|
||
if ( $compatibility ) {
|
||
$urlset->setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns:xhtml', 'http://www.w3.org/1999/xhtml' );
|
||
|
||
foreach ( $mltlngg_enabled_languages as $language ) {
|
||
foreach ( $mltlngg_languages as $item ) {
|
||
if ( $language['name'] == $item[2] ) {
|
||
$language['lang'] = $item[0];
|
||
$enabled_languages[ $item[2] ] = $language;
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( function_exists( 'mltlngg_get_lang_link' ) ) {
|
||
$lang_link = 'mltlngg_get_lang_link';
|
||
}
|
||
$args_links = array();
|
||
}
|
||
|
||
foreach ( $elements as $element ) {
|
||
if ( $compatibility ) {
|
||
foreach ( $enabled_languages as $language ) {
|
||
$args_links["lang"] = $language["locale"];
|
||
$args_links["url"] = $element["url"];
|
||
|
||
$url = $urlset->appendChild( $xml->createElement( 'url' ) );
|
||
$loc = $url->appendChild( $xml->createElement( 'loc' ) );
|
||
$loc->appendChild( $xml->createTextNode( $lang_link( $args_links ) ) );
|
||
|
||
foreach ( $enabled_languages as $language ) {
|
||
$args_links["lang"] = $language["locale"];
|
||
$link = $url->appendChild( $xml->createElement( 'xhtml:link' ) );
|
||
$link->setAttribute( "rel", "alternate" );
|
||
$link->setAttribute( "hreflang", $language['lang'] );
|
||
$link->setAttribute( "href", $lang_link( $args_links ) );
|
||
}
|
||
|
||
if ( isset( $element['video_list_url'] ) ) {
|
||
foreach ( $element['video_list_url'] as $video_it ) {
|
||
$video = $url->appendChild( $xml->createElement( 'video:video' ) );
|
||
|
||
/*video url*/
|
||
$videocont = $video->appendChild( $xml->createElement( 'video:url' ) );
|
||
$videocont->appendChild( $xml->createTextNode( $video_it[0] ) );
|
||
|
||
/*video title*/
|
||
$videotitle = $video->appendChild( $xml->createElement( 'video:title' ) );
|
||
$videotitle->appendChild( $xml->createTextNode( $video_it[1] ) );
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
$url = $urlset->appendChild( $xml->createElement( 'url' ) );
|
||
$loc = $url->appendChild( $xml->createElement( 'loc' ) );
|
||
$loc->appendChild( $xml->createTextNode( $element['url'] ) );
|
||
|
||
if ( isset( $element['video_list_url'] ) ) {
|
||
foreach ( $element['video_list_url'] as $video_it ) {
|
||
$video = $url->appendChild( $xml->createElement( 'video:video' ) );
|
||
|
||
/*video url*/
|
||
$videocont = $video->appendChild( $xml->createElement( 'video:url' ) );
|
||
$videocont->appendChild( $xml->createTextNode( $video_it[0] ) );
|
||
|
||
/*video title*/
|
||
$videotitle = $video->appendChild( $xml->createElement( 'video:title' ) );
|
||
$videotitle->appendChild( $xml->createTextNode( $video_it[1] ) );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$xml->formatOutput = true;
|
||
|
||
if ( ! is_writable( ABSPATH ) ) {
|
||
@chmod( ABSPATH, 0755 );
|
||
}
|
||
|
||
$part_num = ( absint( $part_num ) > 0 ) ? '_' . absint( $part_num ) : '';
|
||
|
||
if ( is_multisite() ) {
|
||
$filename = 'video_sitemap_' . absint( $blog_id ) . $part_num . '.xml';
|
||
} else {
|
||
$filename = 'video_sitemap' . $part_num . '.xml';
|
||
}
|
||
$xml->save( ABSPATH . $filename );
|
||
gglstmp_save_sitemap_info( $filename );
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Function creates xml sitemap index file.
|
||
*
|
||
* @param mixed $blog_id (optional) Sets if the index file is created for network (0) or for single subsite (false: current blog id).
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_create_sitemap_index' ) ) {
|
||
function gglstmp_create_sitemap_index( $blog_id = false, $index_type = '' ) {
|
||
global $wpdb, $gglstmp_options;
|
||
/* index sitemap for network supports only subfolder multisite installation */
|
||
if ( 0 === $blog_id && is_multisite() && is_subdomain_install() ) {
|
||
return;
|
||
}
|
||
|
||
$blog_id = ( false === $blog_id ) ? get_current_blog_id() : absint( $blog_id );
|
||
|
||
if ( ! is_multisite() || 0 === $blog_id ) {
|
||
if ( '' === $index_type ) {
|
||
$index_filename = "sitemap.xml";
|
||
} else {
|
||
$index_filename = "{$index_type}_sitemap.xml";
|
||
}
|
||
} else {
|
||
if ( '' === $index_type ) {
|
||
$index_filename = "sitemap_{$blog_id}.xml";
|
||
} else {
|
||
$index_filename = "{$index_type}_sitemap_{$blog_id}.xml";
|
||
}
|
||
}
|
||
|
||
$elements = gglstmp_get_index_elements( $blog_id, $index_type );
|
||
$index_file = ABSPATH . $index_filename;
|
||
|
||
if ( file_exists( $index_file ) ) {
|
||
unlink( $index_file );
|
||
}
|
||
|
||
$xmlindex = new DomDocument( '1.0', 'utf-8' );
|
||
$site_url = ( 0 === $blog_id ) ? network_site_url( '/' ) : site_url( '/' );
|
||
|
||
$xml_stylesheet_path = ( defined( 'WP_CONTENT_DIR' ) ) ? $site_url . basename( WP_CONTENT_DIR ) : $site_url . 'wp-content';
|
||
$xml_stylesheet_path .= ( defined( 'WP_PLUGIN_DIR' ) ) ? '/' . basename( WP_PLUGIN_DIR ) . '/google-sitemap-plugin/sitemap-index.xsl' : '/plugins/google-sitemap-plugin/sitemap-index.xsl';
|
||
|
||
$xmlindex->appendChild( $xmlindex->createProcessingInstruction( 'xml-stylesheet', "type=\"text/xsl\" href=\"$xml_stylesheet_path\"" ) );
|
||
$sitemapindex = $xmlindex->appendChild( $xmlindex->createElementNS( 'http://www.sitemaps.org/schemas/sitemap/0.9', 'sitemapindex' ) );
|
||
foreach ( $elements as $element ) {
|
||
$sitemap = $sitemapindex->appendChild( $xmlindex->createElement( 'sitemap' ) );
|
||
$loc = $sitemap->appendChild( $xmlindex->createElement( 'loc' ) );
|
||
$loc->appendChild( $xmlindex->createTextNode( $element['loc'] ) );
|
||
$lastmod = $sitemap->appendChild( $xmlindex->createElement( 'lastmod' ) );
|
||
$lastmod->appendChild( $xmlindex->createTextNode( $element['lastmod'] ) );
|
||
}
|
||
|
||
if ( count( $elements ) > 0 ) {
|
||
if ( ! is_writable( ABSPATH ) ) {
|
||
@chmod( ABSPATH, 0755 );
|
||
}
|
||
$xmlindex->formatOutput = true;
|
||
$xmlindex->save( $index_file );
|
||
if ( 0 !== $blog_id ) {
|
||
gglstmp_save_sitemap_info( $index_filename, true );
|
||
}
|
||
} elseif ( file_exists( $index_file ) ) {
|
||
unlink( $index_file );
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Function gets the elements from the blogs options and returns an array of elements to include to the index sitemap file.
|
||
*
|
||
* @param mixed $blog_id (optional) Sets the range of elements to return. false - current subsite, 0 - network index, (int) - id of the subsite
|
||
*
|
||
* @return array $include_index (optional) Sets if index element should be also included.
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_get_index_elements' ) ) {
|
||
function gglstmp_get_index_elements( $blog_id = false, $include_index = false ) {
|
||
global $wpdb;
|
||
$index_elements = $external_index_elements = array();
|
||
$is_multisite = is_multisite();
|
||
if ( $is_multisite && 0 === $blog_id ) {
|
||
/* building main network index */
|
||
$old_blog = $wpdb->blogid;
|
||
$blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" );
|
||
foreach ( $blogids as $id ) {
|
||
switch_to_blog( $id );
|
||
$blog_options = get_option( 'gglstmp_options' );
|
||
if ( ! empty( $blog_options['sitemaps'] ) && is_array( $blog_options['sitemaps'] ) ) {
|
||
foreach ( $blog_options['sitemaps'] as $sitemap ) {
|
||
if (
|
||
( empty( $sitemap['is_index'] ) || $include_index ) &&
|
||
isset( $sitemap['path'] ) && file_exists( $sitemap['path'] ) &&
|
||
isset( $sitemap['loc'] )
|
||
) {
|
||
$index_elements[ $sitemap['loc'] ] = $sitemap;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
switch_to_blog( $old_blog );
|
||
} else {
|
||
$blog_options = ( ! $is_multisite || empty( $blog_id ) ) ? get_option( 'gglstmp_options' ) : get_blog_option( absint( $blog_id ), 'gglstmp_options' );
|
||
if ( ! empty( $blog_options['sitemaps'] ) && is_array( $blog_options['sitemaps'] ) ) {
|
||
foreach ( $blog_options['sitemaps'] as $sitemap ) {
|
||
if (
|
||
( empty( $sitemap['is_index'] ) || $include_index ) &&
|
||
isset( $sitemap['path'] ) && file_exists( $sitemap['path'] ) &&
|
||
isset( $sitemap['loc'] )
|
||
) {
|
||
$index_elements[ $sitemap['loc'] ] = $sitemap;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return $index_elements;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Function returns all the corresponding existing sitemap files.
|
||
*
|
||
* @param mixed $blog_id (optional, default: false) "all" || false || (int)blog_id. Specifies the range of xml files to return.
|
||
* "all" - all availabe sitemap .xml files.
|
||
* false - sitemaps of current blog.
|
||
* blog_id - sitemaps of specified blog, 0 - network index file.
|
||
*
|
||
* @return array $files An array of filenames of existing files of the specified type.
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_get_sitemap_files' ) ) {
|
||
function gglstmp_get_sitemap_files( $blog_id = false ) {
|
||
$files = array();
|
||
|
||
if ( is_multisite() ) {
|
||
if ( 'all' != $blog_id ) {
|
||
$blog_id = ( false === $blog_id ) ? get_current_blog_id() : absint( $blog_id );
|
||
}
|
||
if ( 'all' === $blog_id ) {
|
||
/* all existing sitemap files */
|
||
$mask = "*sitemap*.xml";
|
||
} elseif ( 0 === $blog_id ) {
|
||
/* main network index */
|
||
$mask = "*sitemap.xml";
|
||
} else {
|
||
/* all subsite sitemap files */
|
||
$mask = "*sitemap_{$blog_id}*.xml";
|
||
}
|
||
} else {
|
||
$mask = "*sitemap*.xml";
|
||
}
|
||
|
||
if ( isset( $mask ) ) {
|
||
$files = glob( ABSPATH . $mask );
|
||
}
|
||
|
||
return $files;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Function checks the availability of the sitemap file by the provided URL.
|
||
*
|
||
* @param string $url The url of the xml sitemap file to check.
|
||
*
|
||
* @return array $result An array with the code and message of the external url check. 200 == $result['code'] if success.
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_check_sitemap' ) ) {
|
||
function gglstmp_check_sitemap( $url ) {
|
||
$result = wp_remote_get( esc_url_raw( $url ) );
|
||
if ( is_array( $result ) && ! is_wp_error( $result ) ) {
|
||
return $result['response'];
|
||
} else {
|
||
return $result;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @since 3.1.0
|
||
* Function checks the availability of the sitemap file by the provided URL.
|
||
*
|
||
* @param string $filename The filename to save to the options.
|
||
* @param string $is_index Indicates if the file is an index sitemap.
|
||
* false if is regular sitemap
|
||
* 'index' if is sitemap index
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_save_sitemap_info' ) ) {
|
||
function gglstmp_save_sitemap_info( $filename = 'sitemap.xml', $is_index = false ) {
|
||
global $gglstmp_options;
|
||
$xml_url = home_url( '/' ) . $filename;
|
||
$xml_path = ABSPATH . $filename;
|
||
$is_index = ! ! $is_index ? 1 : 0;
|
||
|
||
$sitemap_data = array(
|
||
'is_index' => $is_index,
|
||
'file' => $filename,
|
||
'path' => $xml_path,
|
||
'loc' => $xml_url,
|
||
'lastmod' => date( 'Y-m-d\TH:i:sP', filemtime( $xml_path ) )
|
||
);
|
||
|
||
if ( file_exists( $xml_path ) ) {
|
||
/* save data to blog options */
|
||
$gglstmp_options['sitemaps'][ $filename ] = $sitemap_data;
|
||
update_option( 'gglstmp_options', $gglstmp_options );
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_get_sitemap_info' ) ) {
|
||
function gglstmp_get_sitemap_info( $blog_id = false ) {
|
||
if ( is_multisite() && ! empty( $blog_id ) ) {
|
||
$options = get_blog_option( absint( $blog_id ), 'gglstmp_options' );
|
||
} else {
|
||
$options = get_option( 'gglstmp_options' );
|
||
}
|
||
|
||
return ( ! empty( $options['sitemaps'] ) ) ? $options['sitemaps'] : array();
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_client' ) ) {
|
||
function gglstmp_client() {
|
||
global $gglstmp_plugin_info;
|
||
|
||
if ( ! function_exists( 'google_api_php_client_autoload' ) || class_exists( 'Google_Client' ) ) {
|
||
require_once( dirname( __FILE__ ) . '/google_api/autoload.php' );
|
||
}
|
||
|
||
$client = new Google_Client();
|
||
$client->setClientId( '37374817621-7ujpfn4ai4q98q4nb0gaaq5ga7j7u0ka.apps.googleusercontent.com' );
|
||
$client->setClientSecret( 'GMefWPZdRIWk3J7USu6_Kf6_' );
|
||
$client->setScopes( array(
|
||
'https://www.googleapis.com/auth/webmasters',
|
||
'https://www.googleapis.com/auth/siteverification'
|
||
) );
|
||
$client->setRedirectUri( 'urn:ietf:wg:oauth:2.0:oob' );
|
||
$client->setAccessType( 'offline' );
|
||
$client->setDeveloperKey( 'AIzaSyBRFiI5TGKKeteDoDa8T8GkJGxRFa1IMxE' );
|
||
$client->setApplicationName( $gglstmp_plugin_info['Name'] );
|
||
|
||
return $client;
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_plugin_status' ) ) {
|
||
function gglstmp_plugin_status( $plugins, $all_plugins, $is_network ) {
|
||
$result = array(
|
||
'status' => '',
|
||
'plugin' => '',
|
||
'plugin_info' => array(),
|
||
);
|
||
foreach ( (array) $plugins as $plugin ) {
|
||
if ( array_key_exists( $plugin, $all_plugins ) ) {
|
||
if (
|
||
( $is_network && is_plugin_active_for_network( $plugin ) ) ||
|
||
( ! $is_network && is_plugin_active( $plugin ) )
|
||
) {
|
||
$result['status'] = 'actived';
|
||
$result['plugin'] = $plugin;
|
||
$result['plugin_info'] = $all_plugins[ $plugin ];
|
||
break;
|
||
} else {
|
||
$result['status'] = 'deactivated';
|
||
$result['plugin'] = $plugin;
|
||
$result['plugin_info'] = $all_plugins[ $plugin ];
|
||
}
|
||
|
||
}
|
||
}
|
||
if ( empty( $result['status'] ) ) {
|
||
$result['status'] = 'not_installed';
|
||
}
|
||
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
/* Display setting page */
|
||
if ( ! function_exists( 'gglstmp_settings_page' ) ) {
|
||
function gglstmp_settings_page() {
|
||
global $gglstmp_plugin_info, $gglstmp_list_table;
|
||
/*pls */
|
||
require_once( dirname( __FILE__ ) . '/includes/pro_banners.php' );
|
||
/* pls*/
|
||
if ( 'google-sitemap-plugin.php' == $_GET['page'] ) {
|
||
/* Showing settings tab */
|
||
if ( ! class_exists( 'Bws_Settings_Tabs' ) )
|
||
require_once( dirname( __FILE__ ) . '/bws_menu/class-bws-settings.php' );
|
||
require_once( dirname( __FILE__ ) . '/includes/class-gglstmp-settings.php' );
|
||
$page = new Gglstmp_Settings_Tabs( plugin_basename( __FILE__ ) );
|
||
if ( method_exists( $page,'add_request_feature' ) )
|
||
$page->add_request_feature();
|
||
} ?>
|
||
<div class="wrap">
|
||
<?php /* Showing settings tab */
|
||
if ( 'google-sitemap-plugin.php' == $_GET['page'] ) {
|
||
?>
|
||
<h1>Sitemap <?php esc_html_e( 'Settings', 'google-sitemap-plugin' ); ?></h1>
|
||
<noscript>
|
||
<div class="error below-h2"><p><strong><?php esc_html_e( "Please enable JavaScript in your browser.", 'google-sitemap-plugin' ); ?></strong></p></div>
|
||
</noscript>
|
||
<?php $page->display_content();
|
||
/*pls */
|
||
} else { ?>
|
||
<h1>
|
||
<?php esc_html_e( 'Custom Links', 'google-sitemap-plugin' ); ?>
|
||
<button disabled="disabled" class="page-title-action add-new-h2"><?php esc_html_e( 'Add New', 'google-sitemap-plugin' ); ?></button>
|
||
</h1>
|
||
<?php gglstmp_pro_block( "gglstmp_custom_links_block", false );
|
||
/* pls*/
|
||
} ?>
|
||
</div>
|
||
<?php }
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_robots_add_sitemap' ) ) {
|
||
function gglstmp_robots_add_sitemap( $output, $public ) {
|
||
if ( '0' != $public ) {
|
||
$home_url = get_option( 'home' );
|
||
$filename = ( is_multisite() ) ? "sitemap_" . get_current_blog_id() . ".xml" : "sitemap.xml";
|
||
$line = "Sitemap: " . $home_url . "/" . $filename;
|
||
if ( file_exists( ABSPATH . $filename ) && false === strpos( $output, $line ) ) {
|
||
$output .= "\n" . $line . "\n";
|
||
}
|
||
}
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/* Function for adding style */
|
||
if ( ! function_exists( 'gglstmp_add_plugin_stylesheet' ) ) {
|
||
function gglstmp_add_plugin_stylesheet() {
|
||
wp_enqueue_style( 'gglstmp_icon', plugins_url( 'css/icon.css', __FILE__ ) );
|
||
if ( isset( $_GET['page'] ) && "google-sitemap-plugin.php" == $_GET['page'] ) {
|
||
bws_enqueue_settings_scripts();
|
||
wp_enqueue_style( 'gglstmp_stylesheet', plugins_url( 'css/style.css', __FILE__ ) );
|
||
}
|
||
}
|
||
}
|
||
|
||
/* Function to get info about site from Google Webmaster Tools */
|
||
if ( ! function_exists( 'gglstmp_get_site_info' ) ) {
|
||
function gglstmp_get_site_info( $webmasters, $site_verification ) {
|
||
global $gglstmp_options;
|
||
|
||
$instruction_url = 'https://docs.google.com/document/d/1ffd0jasAtIEWXiW6Dg81QqmqHODj8j6vqzu2CQFyaT4';
|
||
$home_url = home_url( '/' );
|
||
$wmt_sites_array = $wmt_sitemaps_arr = array();
|
||
|
||
$return = '<table id="gglstmp_manage_table"><tr><th>' . esc_html__( 'Website', 'google-sitemap-plugin' ) . '</th>
|
||
<td><a href="' . $home_url . '" target="_blank">' . $home_url . '</a></td></tr>';
|
||
|
||
try {
|
||
$wmt_sites = $webmasters->sites->listSites()->getSiteEntry();
|
||
|
||
foreach ( $wmt_sites as $site ) {
|
||
$wmt_sites_array[ $site->siteUrl ] = $site->permissionLevel;
|
||
}
|
||
|
||
if ( ! array_key_exists( $home_url, $wmt_sites_array ) ) {
|
||
$return .= '<tr><th>' . esc_html__( 'Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td>' . esc_html__( 'Not added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} else {
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td class="gglstmp_success">' . esc_html__( 'Added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Status', 'google-sitemap-plugin' ) . '</th>';
|
||
if ( 'siteOwner' == $wmt_sites_array[ $home_url ] ) {
|
||
$return .= '<td>' . esc_html__( 'Verified', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} else {
|
||
$return .= '<td>' . esc_html__( 'Not verified', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
}
|
||
|
||
$webmasters_sitemaps = $webmasters->sitemaps->list_sitemaps( $home_url )->get_sitemap();
|
||
|
||
foreach ( $webmasters_sitemaps as $sitemap ) {
|
||
$wmt_sitemaps_arr[ $sitemap->path ] = ( $sitemap->errors > 0 || $sitemap->warnings > 0 ) ? true : false;
|
||
}
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Sitemap Status', 'google-sitemap-plugin' ) . '</th>';
|
||
|
||
if ( is_multisite() ) {
|
||
$blog_id = get_current_blog_id();
|
||
$xml_file = 'sitemap_' . $blog_id . '.xml';
|
||
$url_sitemap = home_url( '/' ) . $xml_file;
|
||
} else {
|
||
$xml_file = 'sitemap.xml';
|
||
$url_sitemap = home_url( '/' ) . $xml_file;
|
||
}
|
||
|
||
if ( ! empty( $url_sitemap ) ) {
|
||
if ( ! array_key_exists( $url_sitemap, $wmt_sitemaps_arr ) ) {
|
||
$return .= '<td>' . esc_html__( 'Not added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} else {
|
||
if ( ! $wmt_sitemaps_arr[ $url_sitemap ] ) {
|
||
$return .= '<td class="gglstmp_success">' . esc_html__( 'Added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} else {
|
||
$return .= '<td>' . esc_html__( 'Added with errors.', 'google-sitemap-plugin' ) . '<a href="https://www.google.com/webmasters/tools/sitemap-details?hl=en&siteUrl=' . urlencode( $home_url ) . '&sitemapUrl=' . urlencode( $url_sitemap ) . '#ISSUE_FILTER=-1">' . esc_html__( 'View errors in Google Webmaster Tools', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
}
|
||
}
|
||
$return .= '<tr><th>' . esc_html__( 'Sitemap URL', 'google-sitemap-plugin' ) . '</th>
|
||
<td><a href="' . $url_sitemap . '" target="_blank">' . $url_sitemap . '</a></td></tr>';
|
||
} else {
|
||
$return .= '<td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . esc_html__( 'Please check the sitemap file manually.', 'google-sitemap-plugin' ) . ' <a target="_blank" href="' . $instruction_url . '">' . esc_html__( 'Learn More', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
}
|
||
}
|
||
} catch ( Google_Service_Exception $e ) {
|
||
$error = $e->getErrors();
|
||
$sv_error = isset( $error[0]['message'] ) ? $error[0]['message'] : esc_html__( 'Unexpected error', 'google-sitemap-plugin' );
|
||
} catch ( Google_IO_Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
$sv_error = true;
|
||
} catch ( Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
}
|
||
|
||
if ( ! empty( $sv_error ) ) {
|
||
if ( true !== $sv_error ) {
|
||
$return .= '<tr><th></th><td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . $sv_error . '</td></tr>';
|
||
}
|
||
$return .= '<tr><th></th><td>' . esc_html__( "Manual verification required.", 'google-sitemap-plugin' ) . ' <a target="_blank" href="' . $instruction_url . '">' . esc_html__( 'Learn More', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
}
|
||
$return .= '</table>';
|
||
|
||
return $return;
|
||
}
|
||
}
|
||
|
||
/* Deleting site from Google Webmaster Tools */
|
||
if ( ! function_exists( 'gglstmp_delete_site' ) ) {
|
||
function gglstmp_delete_site( $webmasters, $site_verification ) {
|
||
global $gglstmp_options;
|
||
|
||
$home_url = home_url( '/' );
|
||
$return = '<table id="gglstmp_manage_table"><tr><th>' . esc_html__( 'Website', 'google-sitemap-plugin' ) . '</th>
|
||
<td><a href="' . $home_url . '" target="_blank">' . $home_url . '</a></td></tr>';
|
||
|
||
try {
|
||
$webmasters_sitemaps = $webmasters->sitemaps->list_sitemaps( $home_url )->get_sitemap();
|
||
foreach ( $webmasters_sitemaps as $sitemap ) {
|
||
try {
|
||
$webmasters->sitemaps->delete( $home_url, $sitemap->path );
|
||
} catch ( Google_Service_Exception $e ) {
|
||
} catch ( Google_IO_Exception $e ) {
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
} catch ( Exception $e ) {
|
||
}
|
||
}
|
||
|
||
$webmasters->sites->delete( $home_url );
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td>' . esc_html__( 'Deleted', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
unset( $gglstmp_options['site_vererification_code'] );
|
||
update_option( 'gglstmp_options', $gglstmp_options );
|
||
|
||
} catch ( Google_Service_Exception $e ) {
|
||
$error = $e->getErrors();
|
||
$sv_error = isset( $error[0]['message'] ) ? $error[0]['message'] : esc_html__( 'Unexpected error', 'google-sitemap-plugin' );
|
||
} catch ( Google_IO_Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
$sv_error = true;
|
||
} catch ( Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
}
|
||
if ( ! empty( $sv_error ) ) {
|
||
$return .= '<tr><th>' . esc_html__( 'Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td>' . esc_html__( 'Not added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
if ( true !== $sv_error ) {
|
||
$return .= '<tr><th></th><td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . $sv_error . '</td></tr>';
|
||
}
|
||
}
|
||
$return .= '</table>';
|
||
|
||
return $return;
|
||
}
|
||
}
|
||
|
||
/* Adding and verifing site, adding sitemap file to Google Webmaster Tools */
|
||
if ( ! function_exists( 'gglstmp_add_site' ) ) {
|
||
function gglstmp_add_site( $webmasters, $site_verification ) {
|
||
global $gglstmp_options;
|
||
|
||
$instruction_url = 'https://docs.google.com/document/d/1ffd0jasAtIEWXiW6Dg81QqmqHODj8j6vqzu2CQFyaT4';
|
||
$home_url = home_url( '/' );
|
||
|
||
$return = '<table id="gglstmp_manage_table"><tr><th>' . esc_html__( 'Website', 'google-sitemap-plugin' ) . '</th>
|
||
<td><a href="' . $home_url . '" target="_blank">' . $home_url . '</a></td></tr>';
|
||
try {
|
||
$webmasters->sites->add( $home_url );
|
||
$return .= '<tr><th>' . esc_html__( 'Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td class="gglstmp_success">' . esc_html__( 'Added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} catch ( Google_Service_Exception $e ) {
|
||
$error = $e->getErrors();
|
||
$wmt_error = isset( $error[0]['message'] ) ? $error[0]['message'] : esc_html__( 'Unexpected error', 'google-sitemap-plugin' );
|
||
} catch ( Google_IO_Exception $e ) {
|
||
$wmt_error = $e->getMessage();
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
$wmt_error = true;
|
||
} catch ( Exception $e ) {
|
||
$wmt_error = $e->getMessage();
|
||
}
|
||
|
||
if ( ! empty( $wmt_error ) ) {
|
||
$return .= '<tr><th>' . esc_html__( 'Status', 'google-sitemap-plugin' ) . '</th>';
|
||
if ( true !== $wmt_error ) {
|
||
$return .= '<td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . $wmt_error . '</td></tr>
|
||
<tr><th></th>';
|
||
}
|
||
$return .= '<td>' . esc_html__( "Manual verification required.", 'google-sitemap-plugin' ) . ' <a target="_blank" href="' . $instruction_url . '">' . esc_html__( 'Learn More', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
} else {
|
||
|
||
try {
|
||
$gglstmp_sv_get_token_request_site = new Google_Service_SiteVerification_SiteVerificationWebResourceGettokenRequestSite;
|
||
$gglstmp_sv_get_token_request_site->setIdentifier( $home_url );
|
||
$gglstmp_sv_get_token_request_site->setType( 'SITE' );
|
||
$gglstmp_sv_get_token_request = new Google_Service_SiteVerification_SiteVerificationWebResourceGettokenRequest;
|
||
$gglstmp_sv_get_token_request->setSite( $gglstmp_sv_get_token_request_site );
|
||
$gglstmp_sv_get_token_request->setVerificationMethod( 'META' );
|
||
$getToken = $site_verification->webResource->getToken( $gglstmp_sv_get_token_request );
|
||
$gglstmp_options['site_vererification_code'] = htmlspecialchars( $getToken['token'] );
|
||
if ( preg_match( '|^<meta name="google-site-verification" content="(.*)" />$|', $gglstmp_options['site_vererification_code'] ) ) {
|
||
update_option( 'gglstmp_options', $gglstmp_options );
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Code', 'google-sitemap-plugin' ) . '</th>
|
||
<td>' . esc_html__( 'Received and added to the site', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} else {
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Code', 'google-sitemap-plugin' ) . '</th>
|
||
<td>' . esc_html__( 'Received, but has not been added to the site', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
}
|
||
} catch ( Google_Service_Exception $e ) {
|
||
$error = $e->getErrors();
|
||
$sv_error = isset( $error[0]['message'] ) ? $error[0]['message'] : esc_html__( 'Unexpected error', 'google-sitemap-plugin' );
|
||
} catch ( Google_IO_Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
$sv_error = true;
|
||
} catch ( Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
}
|
||
|
||
if ( ! empty( $sv_error ) ) {
|
||
if ( true !== $sv_error ) {
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Code', 'google-sitemap-plugin' ) . '</th>
|
||
<td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . $sv_error . '</td></tr>';
|
||
}
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td>' . _esc_html__( "The site couldn't be verified. Manual verification required.", 'google-sitemap-plugin' ) . ' <a target="_blank" href="' . $instruction_url . '">' . esc_html__( 'Learn More', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
} else {
|
||
|
||
try {
|
||
$gglstmp_wmt_resource_site = new Google_Service_SiteVerification_SiteVerificationWebResourceResourceSite;
|
||
$gglstmp_wmt_resource_site->setIdentifier( $home_url );
|
||
$gglstmp_wmt_resource_site->setType( 'SITE' );
|
||
$gglstmp_wmt_resource = new Google_Service_SiteVerification_SiteVerificationWebResourceResource;
|
||
$gglstmp_wmt_resource->setSite( $gglstmp_wmt_resource_site );
|
||
$site_verification->webResource->insert( 'META', $gglstmp_wmt_resource );
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Status', 'google-sitemap-plugin' ) . '</th>
|
||
<td class="gglstmp_success">' . esc_html__( 'Verified', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} catch ( Google_Service_Exception $e ) {
|
||
$error = $e->getErrors();
|
||
$sv_error = isset( $error[0]['message'] ) ? $error[0]['message'] : esc_html__( 'Unexpected error', 'google-sitemap-plugin' );
|
||
} catch ( Google_IO_Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
$sv_error = true;
|
||
} catch ( Exception $e ) {
|
||
$sv_error = $e->getMessage();
|
||
}
|
||
|
||
if ( ! empty( $sv_error ) ) {
|
||
$return .= '<tr><th>' . esc_html__( 'Verification Status', 'google-sitemap-plugin' ) . '</th>';
|
||
if ( true !== $sv_error ) {
|
||
$return .= '<td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . $sv_error . '</td></tr>
|
||
<tr><th></th>';
|
||
}
|
||
$return .= '<td>' . esc_html__( "Manual verification required.", 'google-sitemap-plugin' ) . ' <a target="_blank" href="' . $instruction_url . '">' . esc_html__( 'Learn More', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
} else {
|
||
|
||
$return .= '<tr><th>' . esc_html__( 'Sitemap Status', 'google-sitemap-plugin' ) . '</th>';
|
||
|
||
$is_multisite = is_multisite();
|
||
|
||
if ( $is_multisite ) {
|
||
$blog_id = get_current_blog_id();
|
||
$sitemap_filename = "sitemap_{$blog_id}.xml";
|
||
} else {
|
||
$sitemap_filename = 'sitemap.xml';
|
||
}
|
||
|
||
if (
|
||
! empty( $gglstmp_options['sitemaps'][ $sitemap_filename ]['loc'] ) &&
|
||
! empty( $gglstmp_options['sitemaps'][ $sitemap_filename ]['path'] ) &&
|
||
file_exists( $gglstmp_options['sitemaps'][ $sitemap_filename ]['path'] )
|
||
) {
|
||
$sitemap_url = $gglstmp_options['sitemaps'][ $sitemap_filename ]['loc'];
|
||
$check_result = gglstmp_check_sitemap( $sitemap_url );
|
||
if ( ! is_wp_error( $check_result ) && 200 == $check_result['code'] ) {
|
||
try {
|
||
$webmasters->sitemaps->submit( $home_url, $sitemap_url );
|
||
$return .= '<td class="gglstmp_success">' . esc_html__( 'Added', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
} catch ( Google_Service_Exception $e ) {
|
||
$error = $e->getErrors();
|
||
$wmt_error = isset( $error[0]['message'] ) ? $error[0]['message'] : esc_html__( 'Unexpected error', 'google-sitemap-plugin' );
|
||
} catch ( Google_IO_Exception $e ) {
|
||
$wmt_error = $e->getMessage();
|
||
} catch ( Google_Auth_Exception $e ) {
|
||
$wmt_error = true;
|
||
} catch ( Exception $e ) {
|
||
$wmt_error = $e->getMessage();
|
||
}
|
||
if ( ! empty( $wmt_error ) ) {
|
||
if ( true !== $wmt_error ) {
|
||
$return .= '<td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . $wmt_error . '</td></tr>
|
||
<tr><th></th>';
|
||
}
|
||
$return .= '<td>' . esc_html__( "Please add the sitemap file manually.", 'google-sitemap-plugin' ) . ' <a target="_blank" href="' . $instruction_url . '">' . esc_html__( 'Learn More', 'google-sitemap-plugin' ) . '</a></td></tr>';
|
||
}
|
||
} else {
|
||
$return .= sprintf(
|
||
'<td><strong>%s:</strong> %s</td></tr>',
|
||
esc_html__( 'Error 404', 'google-sitemap-plugin' ),
|
||
sprintf(
|
||
esc_html__( 'The sitemap file %s not found.', 'google-sitemap-plugin' ),
|
||
sprintf(
|
||
'(<a href="%s">%s</a>)',
|
||
$gglstmp_options['sitemaps'][ $sitemap_filename ]['loc'],
|
||
$sitemap_filename
|
||
)
|
||
)
|
||
);
|
||
}
|
||
} else {
|
||
$return .= '<td><strong>' . esc_html__( 'Error', 'google-sitemap-plugin' ) . ':</strong> ' . esc_html__( 'The sitemap file not found.', 'google-sitemap-plugin' ) . '</td></tr>';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$return .= '</table>';
|
||
|
||
return $return;
|
||
}
|
||
}
|
||
|
||
/* Add verification code to the site head */
|
||
if ( ! function_exists( 'gglstmp_add_verification_code' ) ) {
|
||
function gglstmp_add_verification_code() {
|
||
global $gglstmp_options;
|
||
|
||
if ( isset( $gglstmp_options['site_vererification_code'] ) ) {
|
||
echo htmlspecialchars_decode( $gglstmp_options['site_vererification_code'] );
|
||
}
|
||
}
|
||
}
|
||
|
||
/* Check post status before Updating */
|
||
if ( ! function_exists( 'gglstmp_check_post_status' ) ) {
|
||
function gglstmp_check_post_status( $new_status, $old_status, $post ) {
|
||
if ( ! wp_is_post_revision( $post->ID ) ) {
|
||
global $gglstmp_update_sitemap;
|
||
if ( in_array( $new_status, array( 'publish', 'trash', 'future' ) ) ) {
|
||
$gglstmp_update_sitemap = true;
|
||
} elseif (
|
||
in_array( $old_status, array( 'publish', 'future' ) ) &&
|
||
in_array( $new_status, array( 'auto-draft', 'draft', 'private', 'pending' ) )
|
||
) {
|
||
$gglstmp_update_sitemap = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* Updating the sitemap after a post or page is trashed or published */
|
||
if ( ! function_exists( 'gglstmp_update_sitemap' ) ) {
|
||
function gglstmp_update_sitemap( $post_id, $post = null ) {
|
||
if ( ! wp_is_post_revision( $post_id ) && ( ! isset( $post ) || ( 'nav_menu' != $post->post_type && 'nav_menu_item' != $post->post_type ) ) ) {
|
||
global $gglstmp_update_sitemap;
|
||
if ( true === $gglstmp_update_sitemap ) {
|
||
gglstmp_register_settings();
|
||
gglstmp_schedule_sitemap();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/* Functionality for canonical link */
|
||
if ( ! function_exists( 'gglstmp_canonical_tag' ) ) {
|
||
function gglstmp_canonical_tag() {
|
||
if ( is_front_page() ) {
|
||
$canonical_url = '<link rel="canonical" href="' . trailingslashit( home_url() ) . '"/>';
|
||
$canonical_url .= "\n\n";
|
||
echo apply_filters( 'gglstmp_canonical_tag', $canonical_url );
|
||
}
|
||
if ( is_singular() ) {
|
||
global $post;
|
||
$gglstmp_meta_canonical = get_post_meta( $post->ID, '_gglstmp_meta_canonical_tag', true );//get the key id _gglstmp_meta_canonical_tag
|
||
if ( $gglstmp_meta_canonical ) {
|
||
//calls the custom meta text
|
||
$canonical_url = '<link rel="canonical" href="' . $gglstmp_meta_canonical . '"/>';
|
||
$canonical_url .= "\n\n";
|
||
echo apply_filters( 'gglstmp_canonical_tag', $canonical_url );
|
||
} else {
|
||
$canonical_url = '<link rel="canonical" href="' . get_permalink() . '"/>';
|
||
$canonical_url .= "\n\n";
|
||
echo apply_filters( 'gglstmp_canonical_tag', $canonical_url );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_add_custom_canonical_url' ) ) {
|
||
function gglstmp_add_custom_canonical_url( $post ) {
|
||
add_meta_box(
|
||
'Meta Box',
|
||
esc_html__( 'Sitemap plugin', 'google-sitemap-plugin' ),
|
||
'gglstmp_custom_meta_box_content_canonical_url',
|
||
'page',
|
||
'normal',
|
||
'high'
|
||
);
|
||
|
||
add_meta_box(
|
||
'Meta Box',
|
||
esc_html__( 'Sitemap plugin', 'google-sitemap-plugin' ),
|
||
'gglstmp_custom_meta_box_content_canonical_url',
|
||
'post',
|
||
'normal',
|
||
'high'
|
||
);
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_save_custom_canonical_tag_box' ) ) {
|
||
function gglstmp_save_custom_canonical_tag_box() {
|
||
global $post;
|
||
// Get our form field
|
||
if ( isset( $_POST['gglstmp-meta-canonical-url'] ) ) {
|
||
$gglstmp_meta_canonical = esc_url( $_POST['gglstmp-meta-canonical-url'] );
|
||
// Update post meta canonical url
|
||
update_post_meta( $post->ID, '_gglstmp_meta_canonical_tag', $gglstmp_meta_canonical );
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_custom_meta_box_content_canonical_url' ) ) {
|
||
// Content for the custom meta box
|
||
function gglstmp_custom_meta_box_content_canonical_url( $post ) { ?>
|
||
<label><?php esc_html_e( 'Canonical Url', 'google-sitemap-plugin' ); ?>:</label>
|
||
<input style="width:99%;" class="meta-text" type="text" name="gglstmp-meta-canonical-url" value="<?php echo get_post_meta( $post->ID, '_gglstmp_meta_canonical_tag', true ); ?>" /></p>
|
||
<?php }
|
||
}
|
||
|
||
/* Adding setting link in activate plugin page */
|
||
if ( ! function_exists( 'gglstmp_action_links' ) ) {
|
||
function gglstmp_action_links( $links, $file ) {
|
||
/* Static so we don't call plugin_basename on every plugin row. */
|
||
if ( ! is_network_admin() && ! is_plugin_active( 'google-sitemap-pro/google-sitemap-pro.php' ) ) {
|
||
static $this_plugin;
|
||
if ( ! $this_plugin ) {
|
||
$this_plugin = plugin_basename( __FILE__ );
|
||
}
|
||
if ( $file == $this_plugin ) {
|
||
$settings_link = '<a href="admin.php?page=google-sitemap-plugin.php">' . esc_html__( 'Settings', 'google-sitemap-plugin' ) . '</a>';
|
||
array_unshift( $links, $settings_link );
|
||
}
|
||
}
|
||
|
||
return $links;
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_links' ) ) {
|
||
function gglstmp_links( $links, $file ) {
|
||
$base = plugin_basename( __FILE__ );
|
||
if ( $file == $base ) {
|
||
if ( ! is_network_admin() && ! is_plugin_active( 'google-sitemap-pro/google-sitemap-pro.php' ) ) {
|
||
$links[] = '<a href="admin.php?page=google-sitemap-plugin.php">' . esc_html__( 'Settings', 'google-sitemap-plugin' ) . '</a>';
|
||
}
|
||
$links[] = '<a href="https://support.bestwebsoft.com/hc/en-us/sections/200538869" target="_blank">' . esc_html__( 'FAQ', 'google-sitemap-plugin' ) . '</a>';
|
||
$links[] = '<a href="https://support.bestwebsoft.com">' . esc_html__( 'Support', 'google-sitemap-plugin' ) . '</a>';
|
||
}
|
||
|
||
return $links;
|
||
}
|
||
}
|
||
|
||
if ( ! function_exists( 'gglstmp_plugin_banner' ) ) {
|
||
function gglstmp_plugin_banner() {
|
||
global $hook_suffix, $gglstmp_plugin_info;
|
||
|
||
if ( 'plugins.php' == $hook_suffix ) {
|
||
bws_plugin_banner_to_settings( $gglstmp_plugin_info, 'gglstmp_options', 'google-sitemap-plugin', 'admin.php?page=google-sitemap-plugin.php' );
|
||
}
|
||
|
||
if ( isset( $_REQUEST['page'] ) && 'google-sitemap-plugin.php' == $_REQUEST['page'] ) {
|
||
bws_plugin_suggest_feature_banner( $gglstmp_plugin_info, 'gglstmp_options', 'google-sitemap-plugin' );
|
||
}
|
||
}
|
||
}
|
||
|
||
/* add help tab */
|
||
if ( ! function_exists( 'gglstmp_add_tabs' ) ) {
|
||
function gglstmp_add_tabs() {
|
||
$screen = get_current_screen();
|
||
$args = array(
|
||
'id' => 'gglstmp',
|
||
'section' => '200538869'
|
||
);
|
||
bws_help_tab( $screen, $args );
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Fires when the new blog has been added or during the blog activation, marking as not spam or as not archived.
|
||
* @since 1.2.9
|
||
*
|
||
* @param int $blog_id Blog ID
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_add_sitemap' ) ) {
|
||
function gglstmp_add_sitemap( $blog_id ) {
|
||
global $wpdb;
|
||
|
||
/* don`t have to check blog status for new blog */
|
||
if ( 'wpmu_new_blog' != current_filter() ) {
|
||
$blog_details = get_blog_details( $blog_id );
|
||
if (
|
||
! is_object( $blog_details ) ||
|
||
1 == $blog_details->archived ||
|
||
1 == $blog_details->deleted ||
|
||
1 == $blog_details->spam
|
||
) {
|
||
return;
|
||
}
|
||
}
|
||
|
||
gglstmp_schedule_sitemap( $blog_id );
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Fires when the blog has been deleted or blog status has been changed to 'spam', 'deactivated(deleted)' or 'archived'.
|
||
* @since 1.2.9
|
||
*
|
||
* @param int $blog_id Blog ID
|
||
*
|
||
* @return void
|
||
*/
|
||
if ( ! function_exists( 'gglstmp_delete_sitemap' ) ) {
|
||
function gglstmp_delete_sitemap( $blog_id, $gglstmp_del_init = false ) {
|
||
global $gglstmp_options;
|
||
|
||
if ( $gglstmp_options['media_sitemap'] ) {
|
||
$masks = array( 'sitemap' );
|
||
} else {
|
||
$masks = array( 'video_sitemap', 'image_sitemap', 'sitemap' );
|
||
}
|
||
|
||
/* remove blog sitemap files */
|
||
if ( is_multisite() ) {
|
||
foreach ( $masks as $mask ) {
|
||
$mask_file = "{$mask}_{$blog_id}*.xml";
|
||
array_map( "unlink", glob( ABSPATH . "$mask_file" ) );
|
||
}
|
||
if ( $gglstmp_del_init ) {
|
||
array_map( "unlink", glob( ABSPATH . "sitemap.xml" ) );
|
||
}
|
||
} else {
|
||
foreach ( $masks as $mask ) {
|
||
$mask_file = "{$mask}*.xml";
|
||
array_map( "unlink", glob( ABSPATH . "$mask_file" ) );
|
||
}
|
||
}
|
||
|
||
/* update network index file */
|
||
if ( ! $gglstmp_del_init ) {
|
||
gglstmp_create_sitemap_index( 0 );
|
||
}
|
||
}
|
||
}
|
||
|
||
/* Function for delete of the plugin settings on register_activation_hook */
|
||
if ( ! function_exists( 'gglstmp_delete_settings' ) ) {
|
||
function gglstmp_delete_settings() {
|
||
global $wpdb;
|
||
if ( ! function_exists( 'get_plugins' ) ) {
|
||
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
||
}
|
||
$all_plugins = get_plugins();
|
||
|
||
if ( ! array_key_exists( 'google-sitemap-pro/google-sitemap-pro.php', $all_plugins ) &&
|
||
! array_key_exists( 'google-sitemap-plus/google-sitemap-plus.php', $all_plugins ) ) {
|
||
if ( is_multisite() ) {
|
||
/* Get all blog ids */
|
||
$blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" );
|
||
foreach ( $blogids as $blog_id ) {
|
||
delete_blog_option( $blog_id, 'gglstmp_options' );
|
||
delete_blog_option( $blog_id, 'gglstmp_robots' );
|
||
}
|
||
} else {
|
||
delete_option( 'gglstmp_options' );
|
||
delete_option( 'gglstmp_robots' );
|
||
}
|
||
/* remove all sitemaps */
|
||
$sitemaps = gglstmp_get_sitemap_files( 'all' );
|
||
array_map( "unlink", $sitemaps );
|
||
}
|
||
|
||
require_once( dirname( __FILE__ ) . '/bws_menu/bws_include.php' );
|
||
bws_include_init( plugin_basename( __FILE__ ) );
|
||
bws_delete_plugin( plugin_basename( __FILE__ ) );
|
||
}
|
||
}
|
||
|
||
register_activation_hook( __FILE__, 'gglstmp_activate' );
|
||
|
||
add_action( 'admin_menu', 'gglstmp_admin_menu' );
|
||
|
||
add_action( 'init', 'gglstmp_init' );
|
||
add_action( 'admin_init', 'gglstmp_admin_init' );
|
||
|
||
/* initialization */
|
||
add_action( 'plugins_loaded', 'gglstmp_plugins_loaded' );
|
||
|
||
add_action( 'admin_enqueue_scripts', 'gglstmp_add_plugin_stylesheet' );
|
||
|
||
add_action( 'transition_post_status', 'gglstmp_check_post_status', 10, 3 );
|
||
add_action( 'save_post', 'gglstmp_update_sitemap', 10, 2 );
|
||
add_action( 'trashed_post', 'gglstmp_update_sitemap' );
|
||
|
||
add_action( 'gglstmp_sitemap_cron', 'gglstmp_prepare_sitemap' );
|
||
|
||
/* rebuild sitemap on permalink structure change, on taxonomy term add/edit/delete */
|
||
add_action( 'permalink_structure_changed', 'gglstmp_schedule_sitemap', 10, 0 );
|
||
add_action( 'created_term', 'gglstmp_edited_term', 10, 3 );
|
||
add_action( 'edited_term', 'gglstmp_edited_term', 10, 3 );
|
||
add_action( 'delete_term', 'gglstmp_edited_term', 10, 3 );
|
||
|
||
add_filter( 'rewrite_rules_array', 'gglstmp_rewrite_rules', PHP_INT_MAX, 1 );
|
||
|
||
add_action( 'wp_head', 'gglstmp_add_verification_code' );
|
||
|
||
add_filter( 'plugin_action_links', 'gglstmp_action_links', 10, 2 );
|
||
add_filter( 'plugin_row_meta', 'gglstmp_links', 10, 2 );
|
||
|
||
add_action( 'admin_notices', 'gglstmp_plugin_banner' );
|
||
|
||
add_action( 'wpmu_new_blog', 'gglstmp_add_sitemap' );
|
||
add_action( 'activate_blog', 'gglstmp_add_sitemap' );
|
||
add_action( 'make_undelete_blog', 'gglstmp_add_sitemap' );
|
||
add_action( 'unarchive_blog', 'gglstmp_add_sitemap' );
|
||
add_action( 'make_ham_blog', 'gglstmp_add_sitemap' );
|
||
|
||
add_action( 'delete_blog', 'gglstmp_delete_sitemap' );
|
||
add_action( 'deactivate_blog', 'gglstmp_delete_sitemap' );
|
||
add_action( 'make_delete_blog', 'gglstmp_delete_sitemap' );
|
||
add_action( 'archive_blog', 'gglstmp_delete_sitemap' );
|
||
add_action( 'make_spam_blog', 'gglstmp_delete_sitemap' );
|
||
|
||
/* Functionality for canonical link */
|
||
remove_action( 'wp_head', 'rel_canonical' );
|
||
add_action( 'wp_head', 'gglstmp_canonical_tag' );
|
||
// Create custom meta box
|
||
add_action( 'add_meta_boxes', 'gglstmp_add_custom_canonical_url' );
|
||
// Save meta box content
|
||
add_action( 'save_post', 'gglstmp_save_custom_canonical_tag_box' );
|
||
// Add a custom meta box to a post
|