我为我的投资组合项目设置了一个自定义帖子类型。主要网址位于/projects/

现在,我还将永久链接结构的博客文章永久链接设置为/articles/*/。这意味着当我去查看项目组合项目时,URL更改为/articles/projects/project-name/

我知道必须有一种方法可以仅针对我的项目自定义帖子类型重写永久链接。但是我不熟悉声明URL slug的语法-希望能得到我的任何帮助!

#1 楼

注册自定义帖子类型时,必须指定重写规则不应以现有的URL结构开头。

简而言之,这意味着register_post_type调用中的这一行:

'rewrite' => array('slug' => 'projects'),


应该变成这样:

'rewrite' => array('slug' => 'projects','with_front' => false),


有关更多信息,请从代码输入中查看rewrite参数在register_post_type

编辑上:只需确保在更新代码后,通过访问“设置”>“永久链接”即可刷新重写规则。否则,您仍然会看到旧的链接。

评论


辉煌的谢谢!为了澄清,我需要执行刷新规则的所有步骤是转到“设置”->“永久链接”页面,然后单击“保存更改”,对吗?

–杰克
2012年5月25日18:06

您甚至不需要保存更改。仅打开“永久链接”设置页就足够了(也就是说,如果您的.htaccess文件是可写的。否则,请按保存更改并手动复制它在.htaccess中返回的代码)

– 0x61696f
2012年5月25日18:09



这似乎对我不起作用。我的项目帖子仍将转到example.com/projects/title-of-post。我也访问了永久链接页面。是什么原因造成的?我的htaccess中没有任何重写规则。

– Desi
15年1月25日在13:36

哇,谢谢,那是缺少的部分!访问永久链接页面无效,只是保存当前的永久链接设置有效:)

–亚历山大·陶本科布(Alexander Taubenkorb)
19年2月28日在12:09

我一直在不改变刷新规则的情况下进行更改。谢谢你的提示!

– Tan-007
19年11月14日在17:03

#2 楼

我确实在3天前遇到了这个问题,然后在wp.tutsplus.com偶然发现了一系列问题。我换出了自己的代码以更好地解决您的问题,但这是在完成本系列文章之后的结果。另外,请记住,这是未经测试的。

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);
从理论上讲,您可以替换掉$projects_structure变量中存储的URL中想要的任何内容。我最终使用的是什么。

祝您好运,并且一如既往-请务必回来并告诉我们它是如何实现的! :)

评论


通常认为仅由链接组成的答案无济于事,因为这些资源将来可能(并且可能会)不再存在。总结内容。

–chrisguitarguy
2012年5月25日16:56



公平地说,我将进行适当的修订。

–cmegown
2012年5月25日17:16

在那里,我的答案现在包含与在生产环境中成功重写自定义帖子类型URL的工作代码相似的代码。希望它能对您有所帮助!

–cmegown
2012年5月25日17:33