我有一个WordPress网站,我想模仿某些新闻媒体和门户网站生成网址的方式。
例如,你有一篇名为" Man Loves Woman"的文章,CMS软件会创建一个这样的网址:
https://example.com/man-loves-woman/55123
55123
是文章的真实ID,所以
https://example.com/man-does-not-love-woman/55123
只要真实身份55123
未被更改,就会返回相同的文章。无论什么序列可能无关紧要,是%postname%/%id%
还是%id%/%postname%
现在我有一个自定义永久链接设置:
/%postname%/%year%%monthnum%%day%
我对此并不特别高兴,我希望/%postname%/%unique_id%
默认生成%postname%
,但这并不重要它的价值是什么,因为%unique_id%
是不可变的。
我正在查看wp-includes/link-template.php
和rewrite.php
,但我并不精通PHP,但如果有人能指出我正确的方向,我将不胜感激,我有一些基本的了解它是如何工作的,有一个正确的推动我可以跟进并自己解决。
也许我看错都应该集中在Nginx背后并设置一个重写规则,插入%postname%
可以是任何东西,只需使用WordPress永久链接设置中的Default即可生成:
https://example.com/?p=123
答案 0 :(得分:3)
如果您希望在其名称后面显示帖子的唯一ID,则可以通过添加此结构从WordPress永久链接设置中的Custom Structure
进行此操作。
/%postname%/%post_id%
它不能在localhost上运行,但它正在在线网站上工作。
答案 1 :(得分:2)
您需要查看add_rewrite_rule。添加以下代码functions.php
add_action( "init", "so_27051693_permalink" );
function so_27051693_permalink() {
//This rule will match : man-loves-woman/55123
add_rewrite_rule(
'^([^/]*)/([0-9]+)/?',
'index.php?p=$matches[2]',
'top' );
//This rule will match : 55123/man-loves-woman
add_rewrite_rule(
'^([0-9]+)/([^/]*)/?',
'index.php?p=$matches[1]',
'top' );
}
在这两种情况下,都会使用post_id获取帖子。确保通过重新保存永久链接来刷新重写规则。