Files
2026-03-11 15:57:27 +01:00

64 lines
1.8 KiB
PHP

<?php
namespace GRIM_SG;
use GRIM_SG\Vendor\SitemapGenerator;
class MultilingualSitemap extends Sitemap {
public static $template = 'multilingual-sitemap';
public function show_sitemap( $template, $is_xml = true, $inner_sitemap = null, $current_page = null ) {
remove_all_filters( 'pre_get_posts' );
$sitemap = new SitemapGenerator( sgg_get_home_url() );
$this->collect_urls( $template, $inner_sitemap, $current_page );
try {
$sitemap->createMultilingualSitemap( $this->urls );
} catch ( \Exception $exc ) {
echo $exc->getTraceAsString(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
try {
$sitemap->outputSitemap( $template, $is_xml, $inner_sitemap );
} catch ( \Exception $exc ) {
echo $exc->getTraceAsString(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
}
/**
* Collect Sitemap URLs
*/
public function collect_urls( $template = 'sitemap', $inner_sitemap = null, $current_page = null ) {
$this->urls[] = sgg_get_sitemap_url( $this->settings->sitemap_url, 'sitemap_xml' );
// Polylang, TranslatePress
$languages = sgg_get_languages();
$default_language = sgg_get_default_language_code();
if ( ! empty( $languages ) ) {
foreach ( $languages as $language ) {
$url = sgg_get_sitemap_url( "{$language}/{$this->settings->sitemap_url}", 'sitemap_xml' );
$this->urls[] = ! empty( $default_language )
? str_replace( "/{$default_language}/", '/', $url )
: $url;
}
}
// WPML
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
$wpml_languages = apply_filters( 'wpml_active_languages', array() );
foreach ( $wpml_languages as $language ) {
if ( apply_filters( 'wpml_default_language', null ) === $language['code'] ) {
continue;
}
$this->urls[] = esc_url( "{$language['url']}{$this->settings->sitemap_url}" );
}
}
}
}