Wordpress永久链接包括名称和ID,但仅考虑ID

时间:2014-11-20 23:40:09

标签: php wordpress blogs permalinks

我有一个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.phprewrite.php,但我并不精通PHP,但如果有人能指出我正确的方向,我将不胜感激,我有一些基本的了解它是如何工作的,有一个正确的推动我可以跟进并自己解决。

也许我看错都应该集中在Nginx背后并设置一个重写规则,插入%postname%可以是任何东西,只需使用WordPress永久链接设置中的Default即可生成:

https://example.com/?p=123

2 个答案:

答案 0 :(得分:3)

如果您希望在其名称后面显示帖子的唯一ID,则可以通过添加此结构从WordPress永久链接设置中的Custom Structure进行此操作。

/%postname%/%post_id%

它不能在localhost上运行,但它正在在线网站上工作。

enter image description here

答案 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获取帖子。确保通过重新保存永久链接来刷新重写规则。