sitemap-buffer-fallback.php
6 years ago
sitemap-buffer-image-fallback.php
7 years ago
sitemap-buffer-image.php
8 years ago
sitemap-buffer-master-fallback.php
7 years ago
sitemap-buffer-master.php
8 years ago
sitemap-buffer-news-fallback.php
7 years ago
sitemap-buffer-news.php
8 years ago
sitemap-buffer-page-fallback.php
7 years ago
sitemap-buffer-page.php
8 years ago
sitemap-buffer-video-fallback.php
7 years ago
sitemap-buffer-video.php
8 years ago
sitemap-buffer.php
7 years ago
sitemap-builder.php
6 years ago
sitemap-constants.php
6 years ago
sitemap-finder.php
7 years ago
sitemap-librarian.php
6 years ago
sitemap-logger.php
7 years ago
sitemap-state.php
7 years ago
sitemap-stylist.php
6 years ago
sitemaps.php
6 years ago
sitemap-constants.php
233 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Sitemap-related constants. |
| 4 | * |
| 5 | * @package Jetpack |
| 6 | * @since 4.8.0 |
| 7 | * @author Automattic |
| 8 | */ |
| 9 | |
| 10 | /** |
| 11 | * Number of seconds between sitemap and news sitemap updates in development code. |
| 12 | * In production, sitemaps are cached for 12 hours. |
| 13 | * In development, sitemaps are cache for 1 minute. |
| 14 | * |
| 15 | * @since 7.7.0 |
| 16 | */ |
| 17 | if ( defined( 'JETPACK_DEV_DEBUG' ) && JETPACK_DEV_DEBUG ) { |
| 18 | if ( ! defined( 'JP_SITEMAP_INTERVAL') ) { |
| 19 | define( 'JP_SITEMAP_INTERVAL', 60 ); |
| 20 | } |
| 21 | if ( ! defined( 'JP_NEWS_SITEMAP_INTERVAL') ) { |
| 22 | define( 'JP_NEWS_SITEMAP_INTERVAL', 60 ); |
| 23 | } |
| 24 | } |
| 25 | |
| 26 | /** |
| 27 | * Maximum size (in bytes) of a sitemap xml file. |
| 28 | * Max is 716800 = 700kb to avoid potential failures for default memcached limits (1MB) |
| 29 | * |
| 30 | * @link https://www.sitemaps.org/ |
| 31 | * @since 4.8.0 |
| 32 | */ |
| 33 | if ( ! defined( 'JP_SITEMAP_MAX_BYTES' ) ) { |
| 34 | define( 'JP_SITEMAP_MAX_BYTES', 716800 ); |
| 35 | } |
| 36 | |
| 37 | /** |
| 38 | * Maximum size (in url nodes) of a sitemap xml file. |
| 39 | * Per the spec, max value is 50000. |
| 40 | * |
| 41 | * @link https://www.sitemaps.org/ |
| 42 | * @since 4.8.0 |
| 43 | */ |
| 44 | if ( ! defined( 'JP_SITEMAP_MAX_ITEMS' ) ) { |
| 45 | define( 'JP_SITEMAP_MAX_ITEMS', 2000 ); |
| 46 | } |
| 47 | |
| 48 | /** |
| 49 | * Maximum size (in url nodes) of a news sitemap xml file. |
| 50 | * Per the spec, max value is 1000. |
| 51 | * |
| 52 | * @link https://support.google.com/news/publisher/answer/74288?hl=en |
| 53 | * @since 4.8.0 |
| 54 | */ |
| 55 | if ( ! defined( 'JP_NEWS_SITEMAP_MAX_ITEMS' ) ) { |
| 56 | define( 'JP_NEWS_SITEMAP_MAX_ITEMS', 1000 ); |
| 57 | } |
| 58 | |
| 59 | /** |
| 60 | * Batch size for database queries. |
| 61 | * |
| 62 | * @since 4.8.0 |
| 63 | */ |
| 64 | if ( ! defined( 'JP_SITEMAP_BATCH_SIZE' ) ) { |
| 65 | define( 'JP_SITEMAP_BATCH_SIZE', 50 ); |
| 66 | } |
| 67 | |
| 68 | /** |
| 69 | * Number of sitemap files to update on each run. |
| 70 | * |
| 71 | * @since 4.8.0 |
| 72 | */ |
| 73 | if ( ! defined( 'JP_SITEMAP_UPDATE_SIZE' ) ) { |
| 74 | define( 'JP_SITEMAP_UPDATE_SIZE', 100 ); |
| 75 | } |
| 76 | |
| 77 | /** |
| 78 | * Number of seconds between sitemap updates. |
| 79 | * |
| 80 | * @since 4.8.0 |
| 81 | */ |
| 82 | if ( ! defined( 'JP_SITEMAP_INTERVAL' ) ) { |
| 83 | define( 'JP_SITEMAP_INTERVAL', 12 * HOUR_IN_SECONDS ); |
| 84 | } |
| 85 | |
| 86 | /** |
| 87 | * Number of seconds to lock the sitemap state. |
| 88 | * |
| 89 | * @since 4.8.0 |
| 90 | */ |
| 91 | if ( ! defined( 'JP_SITEMAP_LOCK_INTERVAL' ) ) { |
| 92 | define( 'JP_SITEMAP_LOCK_INTERVAL', 15 * MINUTE_IN_SECONDS ); |
| 93 | } |
| 94 | |
| 95 | /** |
| 96 | * Number of seconds between news sitemap updates. |
| 97 | * |
| 98 | * @since 4.8.0 |
| 99 | */ |
| 100 | if ( ! defined( 'JP_NEWS_SITEMAP_INTERVAL' ) ) { |
| 101 | define( 'JP_NEWS_SITEMAP_INTERVAL', 12 * HOUR_IN_SECONDS ); |
| 102 | } |
| 103 | |
| 104 | /* |
| 105 | * These constants represent the types of various kinds of sitemaps. |
| 106 | * Note: these strings are used as 'post_types' in the database, and |
| 107 | * so must be at most 20 characters long. |
| 108 | */ |
| 109 | |
| 110 | if ( ! defined( 'JP_MASTER_SITEMAP_TYPE' ) ) { |
| 111 | define( 'JP_MASTER_SITEMAP_TYPE', 'jp_sitemap_master' ); |
| 112 | } |
| 113 | |
| 114 | if ( ! defined( 'JP_PAGE_SITEMAP_TYPE' ) ) { |
| 115 | define( 'JP_PAGE_SITEMAP_TYPE', 'jp_sitemap' ); |
| 116 | } |
| 117 | |
| 118 | if ( ! defined( 'JP_PAGE_SITEMAP_INDEX_TYPE' ) ) { |
| 119 | define( 'JP_PAGE_SITEMAP_INDEX_TYPE', 'jp_sitemap_index' ); |
| 120 | } |
| 121 | |
| 122 | if ( ! defined( 'JP_IMAGE_SITEMAP_TYPE' ) ) { |
| 123 | define( 'JP_IMAGE_SITEMAP_TYPE', 'jp_img_sitemap' ); |
| 124 | } |
| 125 | |
| 126 | if ( ! defined( 'JP_IMAGE_SITEMAP_INDEX_TYPE' ) ) { |
| 127 | define( 'JP_IMAGE_SITEMAP_INDEX_TYPE', 'jp_img_sitemap_index' ); |
| 128 | } |
| 129 | |
| 130 | if ( ! defined( 'JP_VIDEO_SITEMAP_TYPE' ) ) { |
| 131 | define( 'JP_VIDEO_SITEMAP_TYPE', 'jp_vid_sitemap' ); |
| 132 | } |
| 133 | |
| 134 | if ( ! defined( 'JP_VIDEO_SITEMAP_INDEX_TYPE' ) ) { |
| 135 | define( 'JP_VIDEO_SITEMAP_INDEX_TYPE', 'jp_vid_sitemap_index' ); |
| 136 | } |
| 137 | |
| 138 | /** |
| 139 | * The name (with extension) of a sitemap file of the given |
| 140 | * type and number. |
| 141 | * |
| 142 | * @since 4.8.0 |
| 143 | * |
| 144 | * @param string $type The sitemap type. |
| 145 | * @param string $number The sitemap number. |
| 146 | * |
| 147 | * @return string The filename. |
| 148 | */ |
| 149 | function jp_sitemap_filename( $type, $number = null ) { |
| 150 | if ( is_null( $number ) ) { |
| 151 | return "error-not-int-$type-$number.xml"; |
| 152 | } elseif ( JP_MASTER_SITEMAP_TYPE === $type ) { |
| 153 | return 'sitemap.xml'; |
| 154 | } elseif ( JP_PAGE_SITEMAP_TYPE === $type ) { |
| 155 | return "sitemap-$number.xml"; |
| 156 | } elseif ( JP_PAGE_SITEMAP_INDEX_TYPE === $type ) { |
| 157 | return "sitemap-index-$number.xml"; |
| 158 | } elseif ( JP_IMAGE_SITEMAP_TYPE === $type ) { |
| 159 | return "image-sitemap-$number.xml"; |
| 160 | } elseif ( JP_IMAGE_SITEMAP_INDEX_TYPE === $type ) { |
| 161 | return "image-sitemap-index-$number.xml"; |
| 162 | } elseif ( JP_VIDEO_SITEMAP_TYPE === $type ) { |
| 163 | return "video-sitemap-$number.xml"; |
| 164 | } elseif ( JP_VIDEO_SITEMAP_INDEX_TYPE === $type ) { |
| 165 | return "video-sitemap-index-$number.xml"; |
| 166 | } else { |
| 167 | return "error-bad-type-$type-$number.xml"; |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | /** |
| 172 | * The index type corresponding to a sitemap type. |
| 173 | * |
| 174 | * @since 4.8.0 |
| 175 | * |
| 176 | * @param string $type The sitemap type. |
| 177 | * |
| 178 | * @return string The index type. |
| 179 | */ |
| 180 | function jp_sitemap_index_type_of( $type ) { |
| 181 | if ( JP_PAGE_SITEMAP_TYPE === $type ) { |
| 182 | return JP_PAGE_SITEMAP_INDEX_TYPE; |
| 183 | } elseif ( JP_IMAGE_SITEMAP_TYPE === $type ) { |
| 184 | return JP_IMAGE_SITEMAP_INDEX_TYPE; |
| 185 | } elseif ( JP_VIDEO_SITEMAP_TYPE === $type ) { |
| 186 | return JP_VIDEO_SITEMAP_INDEX_TYPE; |
| 187 | } else { |
| 188 | return "error-bad-type-$type"; |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | /** |
| 193 | * The sitemap type corresponding to an index type. |
| 194 | * |
| 195 | * @since 4.8.0 |
| 196 | * |
| 197 | * @param string $type The index type. |
| 198 | * |
| 199 | * @return string The sitemap type. |
| 200 | */ |
| 201 | function jp_sitemap_child_type_of( $type ) { |
| 202 | if ( JP_PAGE_SITEMAP_INDEX_TYPE === $type ) { |
| 203 | return JP_PAGE_SITEMAP_TYPE; |
| 204 | } elseif ( JP_IMAGE_SITEMAP_INDEX_TYPE === $type ) { |
| 205 | return JP_IMAGE_SITEMAP_TYPE; |
| 206 | } elseif ( JP_VIDEO_SITEMAP_INDEX_TYPE === $type ) { |
| 207 | return JP_VIDEO_SITEMAP_TYPE; |
| 208 | } else { |
| 209 | return "error-bad-type-$type"; |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | /** |
| 214 | * Convert '0000-00-00 00:00:00' to '0000-00-00T00:00:00Z'. |
| 215 | * Note that the input is assumed to be in UTC (a.k.a. GMT). |
| 216 | * |
| 217 | * @link https://www.w3.org/TR/NOTE-datetime |
| 218 | * @since 4.8.0 |
| 219 | * |
| 220 | * @param string $datetime The timestamp to convert. |
| 221 | * |
| 222 | * @return string The converted timestamp. |
| 223 | */ |
| 224 | function jp_sitemap_datetime( $datetime ) { |
| 225 | $regex = '/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/'; |
| 226 | |
| 227 | if ( preg_match( $regex, $datetime ) ) { |
| 228 | return str_replace( ' ', 'T', $datetime ) . 'Z'; |
| 229 | } else { |
| 230 | return $datetime; |
| 231 | } |
| 232 | } |
| 233 |