{"id":245900,"date":"2025-08-24T13:06:25","date_gmt":"2025-08-24T13:06:25","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/xs2h-xml-sitemap-to-html\/"},"modified":"2026-08-21T17:19:12","modified_gmt":"2026-08-21T17:19:12","slug":"xs2h-xml-sitemap-to-html","status":"publish","type":"plugin","link":"https:\/\/nn.wordpress.org\/plugins\/xs2h-xml-sitemap-to-html\/","author":23331926,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.3.2","stable_tag":"3.3.2","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"XML Sitemap to HTML","header_author":"Thomas Meroth","header_description":"Display multiple XML sitemaps as a searchable HTML list or table via shortcode.","assets_banners_color":"","last_updated":"2026-08-21 17:19:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":470,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2":{"tag":"1.2","author":"fradigital","date":"2026-08-21 17:19:12"},"3.3.2":{"tag":"3.3.2","author":"fradigital","date":"2026-08-21 17:19:12"}},"upgrade_notice":{"3.3.2":"<p>Compatibility release for XS2H 1.x and XML Sitemap to HTML 3.3.1 installations. Existing settings and shortcodes are retained.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3349259,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-265x265.png":{"filename":"icon-265x265.png","revision":3349259,"resolution":"265x265","location":"assets","locale":"","width":265,"height":265}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2","3.3.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[34700,944,80,1557,748],"plugin_category":[43,55],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-245900","plugin","type-plugin","status-publish","hentry","plugin_tags-html-sitemap","plugin_tags-search","plugin_tags-shortcode","plugin_tags-sitemap","plugin_tags-xml","plugin_category-customization","plugin_category-seo-and-marketing","plugin_committers-fradigital"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/xs2h-xml-sitemap-to-html\/assets\/icon-128x128.png?rev=3349259","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>XML Sitemap to HTML turns standard XML sitemaps and sitemap indexes into a human-readable HTML sitemap. Add the sitemap URLs once, create a shortcode with the built-in generator, and place it in any post or page.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Combines multiple XML sitemaps<\/li>\n<li>Follows nested sitemap indexes automatically<\/li>\n<li>Searchable list and responsive table layouts<\/li>\n<li>Human-readable titles generated from URL slugs<\/li>\n<li>Optional URL and last-modified output<\/li>\n<li>Configurable title capitalization and slug separator<\/li>\n<li>Configurable transient cache<\/li>\n<li>Duplicate URL removal<\/li>\n<li>Accessible labels, status updates, and keyboard-friendly tables<\/li>\n<li>Server-side shortcode generator with copy button<\/li>\n<li>Backward compatibility with XS2H XML Sitemap to HTML 1.x<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<p>The shortest shortcode uses all saved sitemaps and the default settings:<\/p>\n\n<pre><code>[sitemap-html]\n<\/code><\/pre>\n\n<p>A complete example:<\/p>\n\n<pre><code>[sitemap-html ids=\"all\" search=\"true\" separator=\"-\" layout=\"table\" show_url=\"true\" show_lastmod=\"true\" case=\"title\" cache_ttl=\"3600\"]\n<\/code><\/pre>\n\n<h4>Parameters<\/h4>\n\n<ul>\n<li><code>ids<\/code>: <code>all<\/code> or a comma-separated list of the IDs shown in the generator.<\/li>\n<li><code>search<\/code>: <code>true<\/code> or <code>false<\/code>.<\/li>\n<li><code>separator<\/code>: Up to two slug characters to replace with spaces.<\/li>\n<li><code>layout<\/code>: <code>list<\/code> or <code>table<\/code>.<\/li>\n<li><code>show_url<\/code>: <code>true<\/code> or <code>false<\/code>.<\/li>\n<li><code>show_lastmod<\/code>: <code>true<\/code> or <code>false<\/code>.<\/li>\n<li><code>case<\/code>: <code>title<\/code>, <code>upper<\/code>, <code>lower<\/code>, <code>ucfirst<\/code>, or <code>none<\/code>.<\/li>\n<li><code>cache_ttl<\/code>: Cache duration in seconds. Use <code>0<\/code> to bypass the cache.<\/li>\n<\/ul>\n\n<h3>Backward Compatibility<\/h3>\n\n<p>Upgrading from <strong>XS2H XML Sitemap to HTML 1.x<\/strong> does not require users to recreate their settings or edit existing content:<\/p>\n\n<ul>\n<li>The legacy options <code>xs2h_sitemap_urls<\/code>, <code>xs2h_slug_separator<\/code>, and <code>xs2h_cache_ttl<\/code> are copied when the corresponding 3.x options do not yet exist. Meaningful legacy values also replace untouched 3.3.1 defaults, recovering data after an intermediate 3.3.1 installation.<\/li>\n<li>The legacy shortcode <code>[xs2h-sitemap-html]<\/code> remains registered with all former attributes and defaults.<\/li>\n<li>Legacy shortcode IDs remain 1-based. For example, <code>ids=\"1,2\"<\/code> still selects the first and second saved sitemaps.<\/li>\n<li>Legacy title generation continues to replace underscores in addition to the selected separator.<\/li>\n<li>The 3.x shortcode <code>[sitemap-html]<\/code> retains its 0-based IDs from version 3.3.1.<\/li>\n<li>URL positions and duplicates are preserved when settings are saved, so generated numeric IDs do not shift unexpectedly.<\/li>\n<li>Saved 3.x settings are mirrored to the legacy option names, making a rollback less likely to lose later configuration changes.<\/li>\n<li>A compatibility bootstrap retains the former main plugin filename so an existing activation reference remains loadable after an update.<\/li>\n<\/ul>\n\n<p>The compatibility layer never overwrites non-default 3.x settings.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>xml-sitemap-to-html<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>XML Sitemap to HTML<\/strong>.<\/li>\n<li>Open <strong>Settings \u2192 XML Sitemap to HTML<\/strong>.<\/li>\n<li>Enter one absolute XML sitemap URL per line.<\/li>\n<li>Choose the slug separator and cache duration, then click <strong>Save settings<\/strong>.<\/li>\n<li>Configure the output in the <strong>Shortcode generator<\/strong> and copy the generated shortcode into a page or post.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20use%20a%20sitemap%20index%3F\"><h3>Can I use a sitemap index?<\/h3><\/dt>\n<dd><p>Yes. Sitemap indexes are followed recursively with safeguards against loops and excessive nesting.<\/p><\/dd>\n<dt id=\"why%20is%20a%20sitemap%20not%20loaded%3F\"><h3>Why is a sitemap not loaded?<\/h3><\/dt>\n<dd><p>The URL must use HTTP or HTTPS and return a successful response containing valid XML. WordPress safe HTTP rules can reject private or unsafe destinations.<\/p><\/dd>\n<dt id=\"how%20are%20titles%20generated%3F\"><h3>How are titles generated?<\/h3><\/dt>\n<dd><p>The plugin uses the final URL path segment, URL-decodes it, replaces the configured separator with spaces, collapses repeated whitespace, and applies the selected capitalization.<\/p><\/dd>\n<dt id=\"how%20do%20i%20bypass%20cached%20data%3F\"><h3>How do I bypass cached data?<\/h3><\/dt>\n<dd><p>Set the global cache duration or the shortcode's <code>cache_ttl<\/code> parameter to <code>0<\/code>. Existing transient rows expire according to their original lifetime, but they are not read while caching is disabled.<\/p><\/dd>\n<dt id=\"is%20php%20mbstring%20required%3F\"><h3>Is PHP mbstring required?<\/h3><\/dt>\n<dd><p>No. The plugin uses mbstring when available and falls back to standard PHP string functions otherwise.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.3.2<\/h4>\n\n<ul>\n<li>Added lossless migration from all XS2H 1.x option names.<\/li>\n<li>Restored the legacy <code>[xs2h-sitemap-html]<\/code> shortcode with its 1-based ID behavior.<\/li>\n<li>Preserved the 3.3.1 <code>[sitemap-html]<\/code> shortcode and 0-based IDs.<\/li>\n<li>Added a legacy bootstrap for installations that still reference the former main plugin filename.<\/li>\n<li>Added top and bottom save controls to the settings panel.<\/li>\n<li>Fixed the admin stylesheet path and moved generator behavior to a dedicated script.<\/li>\n<li>Improved the settings guide, parameter documentation, mobile layout, and accessibility.<\/li>\n<li>Localized the live result count instead of hard-coding it in JavaScript.<\/li>\n<li>Added HTTP status validation, safe remote requests, gzip support, XML network isolation, recursion limits, and loop protection.<\/li>\n<li>Added a fallback for servers without mbstring.<\/li>\n<li>Updated compatibility metadata for WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>3.3.1<\/h4>\n\n<ul>\n<li>Introduced the <code>[sitemap-html]<\/code> shortcode, streamlined settings, and a redesigned generator.<\/li>\n<\/ul>\n\n<h4>1.2<\/h4>\n\n<ul>\n<li>Original XS2H release with multiple sitemaps, live search, list\/table layouts, and a server-side generator.<\/li>\n<\/ul>","raw_excerpt":"Display one or more XML sitemaps as an accessible, searchable HTML list or table.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/245900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=245900"}],"author":[{"embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fradigital"}],"wp:attachment":[{"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=245900"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=245900"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=245900"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=245900"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=245900"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/nn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=245900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}