在之前的文章中,我们注册了一个WordPress自定义文章类型——商城,也实现了“商城”模块菜单在后台的显示,前台的文章也可以正常显示。但是前台文章地址栏的地址并不好看,因为我们的文章标题基本都是中文的,所以翻译后代码会很长,有点难看,如下所示:
这样的地址看起来非常不雅观,也不利于网站的SEO。因为register_post_type()的默认显示地址链接样式是‘post-slug/postname’,即自定义文章类型名称+文章名称,而我们的文章名称是中文,所以造成了这种难看的地址链接。
为了使这个地址链接看起来很好并且对SEO有利,我们需要修改它的固定链接。register_post_type()函数中有固定的链接相关参数,例如rewrite和slug,我们需要使用这些参数(详见上一章的介绍)。上图中难看的地址之所以出现,是因为我们在wordpress后台设置了一个固定链接,当register_post_type()注册一个自定义文章类型时,rewrite被设置为true,这将是“自定义文章类型名称+文章名称”的地址。因为register_post_type()的默认显示地址链接样式是‘post-slug/postname’,即自定义文章类型名称+文章名称,所以我们需要对其进行修改,即修改此固定链接的样式,例如让固定链接显示文章的ID号而不是文章名称。如下所示:
Http://xxxxxxxxxx.com/book/33.HTML,是如何实现的呢?以下代码修改了自定义文章类型的固定链接格式,并将其放入主题functions.php文件中:
add _ filter(‘post _ type _ link‘,custom _ book _ link,1,3);函数custom _ book _ link($ link,$ post = 0){ if($ post-& gt;post _ type = =‘book‘){ return home _ URL(‘book/‘)。$ post-& gt;身份证。。html’);} else { return $ link} } add _ action(‘init’,‘custom _ book _ rewrites _ init’);函数custom _ book _ rewrites _ init(){ add _ rewrite _ rule(‘book/(【0-9】+)?。html $‘,index.php?书&。p = $ matches【1】‘,‘top‘;}上述代码仅适用于一种自定义文章类型,但如果您注册了多个自定义文章类别,则不适用。方法总是比问题多,以下是解决方案:
$ my types = array(‘type 1‘= & gt;slug1,‘type 2‘= & gt;slug2,‘type 3‘= & gt;slug 3’);add _ filter(‘post _ type _ link‘,custom _ book _ link,1,3);函数custom _ book _ link($ link,$ post = 0){ global $ my types;if(in _ array($ post-》;post_type,array _ keys($ mytypes)){ return home _ URL($ mytypes【$ post-& gt;post_type】。’/’ .$ post-& gt;身份证。。html’);} else { return $ link} } add _ action(‘init’,‘custom _ book _ rewrites _ init’);函数custom _ book _ rewrites _ init(){ global $ my types;foreach($ mytypes as $ k = & gt;$ v){ add _ rewrite _ rule($ v .‘/(【0-9】+)?。html $‘,index.php?post_type=“。$ k‘& amp;p = $ matches【1】‘,‘top‘;}}在上面的代码中,有三种自定义文章类型,即slug1、slug2和slug3。当然这个名字应该和你注册时的原名一一对应,slug1、slug2、slug3分别是固定链接的前缀。
好了,如何修改wordpress自定义文章类型的固定链接样式说完了,后面会介绍相关内容。