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 或其它形式的目录前缀。
暂无评论
要发表评论,您必须先 登录