
WordPress 的设置中有个固定链接选项,可以选择文章、页面、分类和标签等页面链接的形式。从实际出发与各位同学们聊聊,虫子菌为什么采用/p/%postname%.html和cat、tag作为分类和标签的前缀的形式。
文章和页面的自定义结构

p是 post 的简写 ,通过 p 可以判断该链接是文章和页面,另一方还能生成静态页面时,p 作为目录可以更好的管理它们。
%postname%是文章的别名,我写了个函数按照年+0+文章ID 共7位纯数字的形式自动生成,长度统一,视觉美观。
.html是静态页面的后缀,CDN 服务一般默认会缓存 .html 后缀的链接。WordPress 是动态的,当生成为静态页面正好和 .html 相统一,不用额外设置规则。
分类和标签的自定义结构

cat和tag分别作为分类和标签的前缀,作用和文章页加 p 做前缀一致,既可以对链接类型做区分,也有助于生成静态页面时的管理。
这里需要注意,自定义结构加 .html 后,分类和标签链接的尾部就没有斜杠/了,没有斜杠 CDN 不会缓存,并且对生成静态页面不力,所以需要用代码 为分类和标签链接加上斜杠。
以上固定链接的配套代码
//给标签和分类增加斜杠
function nice_trailingslashit($string, $type_of_url) {
if ( $type_of_url != 'single' && $type_of_url != 'page' && $type_of_url != 'single_paged' )
$string = trailingslashit($string);
return $string;
}
add_filter('user_trailingslashit', 'nice_trailingslashit', 10, 2);
//固定连接结构为 %postname% 时,自动使用年+0+文章ID共7位数做别名
//教程:https://www.cccitu.com/2205266.html
add_action( 'save_post', 'using_id_as_slug', 10, 2 );
function using_id_as_slug($post_id, $post){
global $post_type;
if($post_type=='post'){ //只对文章生效
//如果已经存在别名则停止运行,避免修改文章导致网址出现变化
if(get_post( $post_id )->post_name)
return false;
// 取消挂载该函数,防止无限循环
remove_action('save_post', 'using_id_as_slug' );
//使用年份、文章ID和随机数做别名
$id = "0000".$post -> ID; //文章ID前加上4个零
$id = substr($id,-5); //从后往前取5位数
$cccitu_slug= date('y').$id; //取年的2位数和0与文章ID的5位数组合为7位数
wp_update_post(array('ID' => $post_id, 'post_name' => $cccitu_slug ));
// 重新挂载该函数
add_action('save_post', 'using_id_as_slug' );
}
}
将以上代码复制到所用主题的 functions.php 底部保存生效。
总结
以上 WordPress 固定链接 的形式,主要考虑到 URL 视觉美观,CDN 和静态友好,目录形式方便管理。比较遗憾的是,玩机大学因历史遗留问题,文章页的没能加 p 或其它形式的目录前缀。


暂无评论
要发表评论,您必须先 登录