<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
* XMLWriter implementation of the image sitemap buffer.
* @package automattic/jetpack
if ( ! defined( 'ABSPATH' ) ) {
* A buffer for constructing sitemap image xml files using XMLWriter.
class Jetpack_Sitemap_Buffer_Image_XMLWriter extends Jetpack_Sitemap_Buffer_XMLWriter {
* Initialize the buffer with required headers (no root element here).
protected function initialize_buffer() {
$this->writer->writeComment( "generator='jetpack-" . JETPACK__VERSION . "'" );
$this->writer->writeComment( 'Jetpack_Sitemap_Buffer_Image_XMLWriter' );
'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'image-sitemap.xsl' ) . '"'
* Start the root element and write its namespaces.
protected function start_root() {
$this->writer->startElement( 'urlset' );
* Filter the XML namespaces included in image sitemaps.
* @param array $namespaces Associative array with namespaces and namespace URIs.
$namespaces = apply_filters(
'jetpack_sitemap_image_ns',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
'xmlns:image' => 'http://www.google.com/schemas/sitemap-image/1.1',
foreach ( $namespaces as $name => $value ) {
$this->writer->writeAttribute( $name, $value );
* Append a URL entry with image information to the sitemap.
* @param array $array The URL item to append.
protected function append_item( $array ) {
if ( ! isset( $array['url'] ) || ! is_array( $array['url'] ) ) {
if ( isset( $array['url']['image:image'] ) ) {
if ( empty( $array['url']['image:image']['image:title'] ) ) {
unset( $array['url']['image:image']['image:title'] );
if ( empty( $array['url']['image:image']['image:caption'] ) ) {
unset( $array['url']['image:image']['image:caption'] );
$this->array_to_xml( $array );