将自定义URL添加到WordPress的XML站点地图

时间:2021-08-20 作者:equin0x80

我的WordPress站点还包含一些外部非WP内容,这些内容通过快捷码动态拉入页面。显示的内容取决于查询字符串参数。所以从WP的角度来看,index 只是一个包含短代码的页面;但实际上,当你访问index?x=1, index?x=2, index?x=3, 等等。根据x 价值(它是大型外部数据库的主键ID。)

这很好,避免了在WP中创建数千个单独的页面,尽管我必须过滤get_canonical_url 要确保规范URL保留查询字符串,请使用x 值(否则将由WP去除)。

现在我想在WP的自动生成的网站地图中包含所有这些页面(/wp-sitemap.xml), 同样,当前只列出了一个裸URL,没有x 价值我需要网站地图包括index?x=1, index?x=2, index?x=3, 等等,以覆盖所有现有的ID值。

我可以很容易地编写PHP代码来生成这些URL的列表,但是我如何连接到站点地图生成过程中,将它们添加到WP生成的默认列表中呢?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

站点地图提供程序可以创建所谓的自定义sitemap provider 并将其注册到wp_register_sitemap_provider().

查看核心设置很有帮助,例如WP_Sitemaps_Posts 提供商以及dev notes.

基本示例-带有自定义URL的站点地图wpse 扩展的提供程序WP_Sitemaps_Provider, 通过匿名类:

add_action ( \'init\', function () {  
    wp_register_sitemap_provider( 
        \'wpse\', 
        new class extends \\WP_Sitemaps_Provider {
            public function __construct() {
                $this->name = \'wpse\'; // public-facing name in URLs says parent class.
            }
            public function get_url_list( $page_num, $post_type = \'\' ) {
                return array(
                    array(
                        \'loc\' => add_query_arg( \'x\', 1, home_url() ),
                    ),
                    array(
                        \'loc\' => add_query_arg( \'x\', 2, home_url() ),
                    ),
                );
            }
            public function get_max_num_pages( $subtype = \'\' ) {
                return 1;
            }
        }
    );
} );
它将生成wp-sitemap-wpse-{PAGE NUMBER <= get_max_num_pages()}.xmlwp-sitemap-wpse-1.xml:

enter image description here

包含以下两个自定义URL:

enter image description here

外部DB

对于外部DB,您可以调整get_max_num_pages()get_url_list() 上述方法的帮助,例如:

总数量x 来自外部DB分页块的值x 外部DB的值wp_sitemaps_get_max_urls() 默认情况下是2000当前页码$page_num附言:环顾四周article 关于wp kama,这可能对外部DB有很大帮助。

相关推荐

为什么WordPress在未登录时会将与管理员相关的脚本(例如,Reaction、ReactDOM、Redux、Hooks、TinyMCE等)放入队列?

为了提高我的网站的性能,我注意到Wordpress在前端加入了许多与管理相关的脚本和样式表。我想知道我怎样才能阻止这一切的发生。。。我正在考虑将所有的违规行为都退出队列,但我的服务器响应时间会稍微慢一点。是否有一种经过测试的方法可以做到这一点?