我的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生成的默认列表中呢?
最合适的回答,由SO网友:birgire 整理而成
查看核心设置很有帮助,例如WP_Sitemaps_Posts
提供商以及dev notes.
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()}.xml
或
wp-sitemap-wpse-1.xml
:
包含以下两个自定义URL:
外部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有很大帮助。