自定义WordPress里标签(tag)和分类目录(category)的固定链接结构的方法

本文主要是介绍自定义WordPress里标签(tag)和分类目录(category)的固定链接结构的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于Wordpress比较熟悉的朋友应该知道,如果想修改文章(post)的固定链接结构(permalinks),可以到Wordpress后台管理界面进行修改,比如说,如果你想让页面地址都有一个“news”的前缀,形如:

http://www.webhek.com/news/hollow-world/

你可以在后台的“固定链接”设置界面将固定链接结构设置为“/news/%postname%”就行了。

但是,你会发现,只有文章页(post)的链接结构上这样改的,而一般页面(page)的链接结构没有变化,而且,标签(tag)的链接结构也变成了”/news/%tag%”样子。

如果你想让所有的页面(page)的固定链接结构也变成“/news/%pagename%”模式,之前的文章《修改WordPress里页面(page)的固定链接结构的方法》里清楚的介绍了修改的方法。

现在的问题是,如果你想自定义标签(tag)的固定链接,让它不随文章页(post)的链接结构的变化而变化,让标签页(tag)具有更个性的链接结构,怎么办呢?

或者,我还想自定义分类目录页(category)的固定链接结构,有什么办法?

从《修改WordPress里页面(page)的固定链接结构的方法》里可以看出,我们是应该从$wp_rewrite 对象下手。前提是要知道 $wp_rewrite 对象里数据结构究竟是怎样的,才能找出修改的方法,于是我把 $wp_rewrite 打印了出来,下面就是这个对象的内部结构:

WP_Rewrite Object
([permalink_structure] => /post/%postname%.html[use_trailing_slashes] => [author_base] => author[page_structure] => %pagename%.html[search_base] => search[comments_base] => comments[pagination_base] => page[comments_pagination_base] => comment-page[feed_base] => feed[front] => /post/[root] => [index] => index.php[matches] => [rules] => [extra_rules] => Array()[extra_rules_top] => Array()[non_wp_rules] => Array()[extra_permastructs] => Array([category] => Array([with_front] => [ep_mask] => 512[paged] => 1[feed] => 1[forcomments] => [walk_dirs] => 1[endpoints] => 1[struct] => cat/%category%)[post_tag] => Array([with_front] => [ep_mask] => 1024[paged] => 1[feed] => 1[forcomments] => [walk_dirs] => 1[endpoints] => 1[struct] => tag/%post_tag%)[post_format] => Array([with_front] => 1[ep_mask] => 0[paged] => 1[feed] => 1[forcomments] => [walk_dirs] => 1[endpoints] => 1[struct] => /post/type/%post_format%))[endpoints] => Array()[use_verbose_rules] => [use_verbose_page_rules] => 1[rewritecode] => Array([0] => %year%[1] => %monthnum%[2] => %day%[3] => %hour%[4] => %minute%[5] => %second%[6] => %postname%[7] => %post_id%[8] => %author%[9] => %pagename%[10] => %search%[11] => %category%[12] => %post_tag%[13] => %post_format%)[rewritereplace] => Array([0] => ([0-9]{4})[1] => ([0-9]{1,2})[2] => ([0-9]{1,2})[3] => ([0-9]{1,2})[4] => ([0-9]{1,2})[5] => ([0-9]{1,2})[6] => ([^/]+)[7] => ([0-9]+)[8] => ([^/]+)[9] => ([^/]+?)[10] => (.+)[11] => (.+?)[12] => ([^/]+)[13] => ([^/]+))[queryreplace] => Array([0] => year=[1] => monthnum=[2] => day=[3] => hour=[4] => minute=[5] => second=[6] => name=[7] => p=[8] => author_name=[9] => pagename=[10] => s=[11] => category_name=[12] => tag=[13] => post_format=)[feeds] => Array([0] => feed[1] => rdf[2] => rss[3] => rss2[4] => atom))

这下就清楚了,之前我们修改页面(page)的固定链接结构是修改了[page_structure] => %pagename%.html,而修改标签页(tag)的固定链接结构很显然是要修改[extra_permastructs][post_tag][struct] => tag/%post_tag%这个值,而修改分类目录页(category)的固定链接,自然是修改[extra_permastructs][category][struct] => cat/%category%的值。

下面是具体的修改代码:

function custom_page_rules() {global $wp_rewrite;//修改page的固定链接结构$wp_rewrite->page_structure = $wp_rewrite->root . 'post/%pagename%.html'; //修改tag的固定链接结构$wp_rewrite->extra_permastructs['post_tag']['with_front'] = '';$wp_rewrite->extra_permastructs['post_tag']['struct'] = 'tag/%post_tag%';
}add_action( 'init', 'custom_page_rules' );

把上面的这段代码放到function.php里,就能自定义 1)page的固定链接结构,2)tag页的固定链接结构。

修改分类目录页(category)的固定链接也是同样的道理。

严谨的说,Wordpress里并没有提供安全的接口来实现这些修改,上面的这些方法属于不安全的入侵,如果某天Wordpress升级了数据结构,那这些修改方法将会失效,甚至会引起系统错误等,所以,有一定风险。

大家的感觉呢?


转自:http://www.webhek.com/custom-wordpress-tag-category-permallink

这篇关于自定义WordPress里标签(tag)和分类目录(category)的固定链接结构的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/298093

相关文章

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束