class-sitemaps-admin.php
2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
/**
* @package WPSEO\Admin\XML Sitemaps
*/
/**
* Class that handles the Admin side of XML sitemaps
*/
class WPSEO_Sitemaps_Admin {
/**
* Class constructor
*/
function __construct() {
add_action( 'transition_post_status', array( $this, 'status_transition' ), 10, 3 );
add_action( 'admin_init', array( $this, 'delete_sitemaps' ) );
}
/**
* Find sitemaps residing on disk as they will block our rewrite.
*
* @todo issue #561 https://github.com/Yoast/wordpress-seo/issues/561
*/
function delete_sitemaps() {
$options = WPSEO_Options::get_all();
if ( $options['enablexmlsitemap'] === true ) {
$file_to_check_for = array(
/**
* ABSPATH . 'sitemap.xml',
* ABSPATH . 'sitemap.xslt',
* ABSPATH . 'sitemap.xsl',
*/
ABSPATH . 'sitemap_index.xml',
);
$new_files_found = false;
foreach ( $file_to_check_for as $file ) {
if ( ( $options['blocking_files'] === array() || ( $options['blocking_files'] !== array() && in_array( $file, $options['blocking_files'] ) === false ) ) && file_exists( $file ) ) {
$options['blocking_files'][] = $file;
$new_files_found = true;
}
}
unset( $file );
if ( $new_files_found === true ) {
update_option( 'wpseo', $options );
}
}
}
/**
* Hooked into transition_post_status. Will initiate search engine pings
* if the post is being published, is a post type that a sitemap is built for
* and is a post that is included in sitemaps.
*
* @param string $new_status New post status.
* @param string $old_status Old post status.
* @param \WP_Post $post Post object.
*/
function status_transition( $new_status, $old_status, $post ) {
if ( $new_status != 'publish' ) {
return;
}
wp_cache_delete( 'lastpostmodified:gmt:' . $post->post_type, 'timeinfo' ); // #17455.
$options = WPSEO_Options::get_all();
if ( isset( $options[ 'post_types-' . $post->post_type . '-not_in_sitemap' ] ) && $options[ 'post_types-' . $post->post_type . '-not_in_sitemap' ] === true ) {
return;
}
if ( WP_CACHE ) {
wp_schedule_single_event( ( time() + 300 ), 'wpseo_hit_sitemap_index' );
}
// Allow the pinging to happen slightly after the hit sitemap index so the sitemap is fully regenerated when the ping happens.
$excluded_posts = explode( ',', $options['excluded-posts'] );
if ( ! in_array( $post->ID, $excluded_posts ) ) {
if ( defined( 'YOAST_SEO_PING_IMMEDIATELY' ) && YOAST_SEO_PING_IMMEDIATELY ) {
wpseo_ping_search_engines();
}
else {
wp_schedule_single_event( ( time() + 300 ), 'wpseo_ping_search_engines' );
}
}
}
} /* End of class */