|
wordpress生成sitemap.txt文本文件(一)
在WordPress中,你可以使用插件或者手动创建一个函数来生成sitemap.txt文本文件。以下是一个简单的PHP函数,用于在WordPress中生成sitemap.txt:
- <?php
- // 确保WordPress环境已经加载
- if (!defined('ABSPATH')) {
- exit;
- }
-
- // 创建sitemap.txt函数
- function create_sitemap_txt() {
- $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
- $domainName = $_SERVER['HTTP_HOST'];
-
- $sitemap_urls = array();
-
- // 获取所有published文章的URL
- $posts = get_posts(array(
- 'numberposts' => -1,
- 'post_type' => 'post',
- 'post_status' => 'publish',
- 'fields' => 'ids'
- ));
-
- foreach($posts as $post_id) {
- $sitemap_urls[] = $protocol . $domainName . get_permalink($post_id);
- }
-
- // 获取所有published页面的URL
- $pages = get_pages(array(
- 'numberposts' => -1,
- 'post_status' => 'publish',
- 'fields' => 'ids'
- ));
-
- foreach($pages as $page_id) {
- $sitemap_urls[] = $protocol . $domainName . get_page_link($page_id);
- }
-
- // 获取所有category的URL
- $categories = get_categories(array(
- 'hide_empty' => 0
- ));
-
- foreach($categories as $category) {
- $sitemap_urls[] = $protocol . $domainName . get_category_link($category->term_id);
- }
-
- // 获取所有tag的URL
- $tags = get_terms(array(
- 'taxonomy' => 'post_tag',
- 'hide_empty' => false
- ));
-
- foreach($tags as $tag) {
- $sitemap_urls[] = $protocol . $domainName . get_tag_link($tag->term_id);
- }
-
- // 创建sitemap.txt文件
- $sitemap_txt_path = get_home_path() . 'sitemap.txt';
- $file = fopen($sitemap_txt_path, 'w');
-
- foreach($sitemap_urls as $url) {
- fwrite($file, $url . "\n");
- }
-
- fclose($file);
- }
-
- // 在特定时间(如每日)运行create_sitemap_txt函数
- if (!wp_next_scheduled('my_daily_event')) {
- wp_schedule_event(time(), 'daily', 'my_daily_event');
- }
-
- add_action('my_daily_event', 'create_sitemap_txt');
- ?>
复制代码 这段代码将创建一个sitemap.txt文件,包含你网站上所有published文章、页面、分类和标签的链接。你可以将这段代码添加到你的functions.php文件中,或者创建一个插件,并在插件的activation钩子中调用这个函数。
请注意,这个例子使用了wp_schedule_event来定期生成sitemap.txt文件。你需要确保你的服务器配置允许WordPress Cron工作。如果你不想使用Cron,可以直接在你的函数中调用create_sitemap_txt()。
此外,这个例子没有考虑到sitemap的优化,比如排除隐藏的页面、处理自定义post types等。你可以根据你的具体需求进行相应的扩展和优化。
|
|