WordPress插件是非常丰富的,很多功能可以通过插件来实现,不过插件较多会影响一定的速度以及不同主题模板之间的兼容性。站点地图不少使用wordpress程序用户要使用的,不过需要安装相应的插件,之前分享过wordpress sitemap插件,不过也可以使用代码来实现,以下方法适合DUX主题。其他主题自行修改相对位置位置,谢谢。
1、在主题目录中options.php 添加开关。
$options[] = array( 'name' => __('更新文章时生成站点地图xml', 'haoui'), 'desc' => __('开启', 'haoui'), 'id' => 'sitemap_xml', 'std' => true, 'type' => 'checkbox');
注:位置自己安排,没有要求!
2、在主题目录 functions.php 添加
// sitemap_xml if (_hui('sitemap_xml')) { function cvps_sitemap_refresh() { require_once get_template_directory() . '/modules/sitemap-xml.php'; $sitemap_xml = cvps_get_xml_sitemap(); file_put_contents(ABSPATH.'sitemap.xml', $sitemap_xml); } if ( defined('ABSPATH') ) { add_action('publish_post', 'cvps_sitemap_refresh'); add_action('save_post', 'cvps_sitemap_refresh'); add_action('edit_post', 'cvps_sitemap_refresh'); add_action('delete_post', 'cvps_sitemap_refresh'); } }
3、在主题目录中 modules 文件夹 新建 sitemap-xml.php 并添加以下代码:
<?php
function cvps_get_xml_sitemap() {
ob_start();
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">
<!-- generated-on=<?php echo get_lastpostdate('blog'); ?> -->
<url>
<loc><?php echo get_home_url(); ?></loc>
<lastmod><?php echo gmdate('Y-m-d\TH:i:s+00:00', strtotime(get_lastpostmodified('GMT'))); ?></lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<?php
// 文章
$posts = get_posts('numberposts=-1&orderby=post_date&order=DESC');
foreach($posts as $post) :
?>
<url>
<loc><?php echo get_permalink($post->ID); ?></loc>
<lastmod><?php echo str_replace(" ", "T", get_post($post->ID)->post_modified); ?>+00:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<?php
endforeach;
// 页面
$pages = get_pages('numberposts=-1&orderby=post_date&order=DESC');
foreach($pages as $page) :
?>
<url>
<loc><?php echo get_page_link($page->ID); ?></loc>
<lastmod><?php echo str_replace(" ", "T", get_page($page->ID)->post_modified); ?>+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
<?php
endforeach;
// 分类
$categorys = get_terms('category', 'orderby=name&hide_empty=0');
foreach ($categorys as $category) :
?>
<url>
<loc><?php echo get_term_link($category, $category->slug); ?></loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<?php
endforeach;
// 标签
$tags = get_terms('post_tag', 'orderby=name&hide_empty=0');
foreach ($tags as $tag) :
?>
<url>
<loc><?php echo get_term_link($tag, $tag->slug); ?></loc>
<changefreq>monthly</changefreq>
<priority>0.4</priority>
</url>
<?php
endforeach;
?>
</urlset>
<?php
$sitemap = ob_get_contents();
ob_clean();
return $sitemap;
}
如果您需要添加公告到sitemap中,请在</url>后 <?php 前加入以下代码:
<?php
endforeach;
// 公告
$posts = get_posts('post_type=bulletin&numberposts=-1&orderby=post_date&order=DESC');
foreach($posts as $post) :
?>
<?php if (_hui('no_bulletin')) { ?>
<url>
<loc><?php echo get_permalink($post->ID); ?></loc>
<lastmod><?php echo str_replace(" ", "T", get_post($post->ID)->post_modified); ?>+00:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
注意事项:此方法适合文章内容在1000之内的,超过生成时间较长!