如何更改单个帖子永久链接的默认结构生成?
问题描述:
我想改变the_permalink()
函数等的输出。所以,我不想更改所有帖子类型的mermalink结构,只更改'发布'帖子类型,并且只更改单个页面。如何更改单个帖子永久链接的默认结构生成?
我已经改变了重写规则,使
mysite.com/news/2016/the-news-title
将推动用户对单后的页面模板和显示内容正确。精细。 现在,正如我所说的,我需要the_permalink()
函数来生成具有该结构的链接。
我该怎么办?
答
确定下面的诺曼迹象,我可以张贴我自己的答案。我可以'the_permalink'过滤器并修改输出,如果post_type =='post'。基本代码:
add_filter('the_permalink', 'edit_the_permalink', 10, 2);
function edit_the_permalink($permalink, $post) {
// you should pass the post object when calling the_permalink()
if(is_object($post) && $post->post_type == 'post'){
// [...do the magic...]
return $permalink;
}
}
请注意,这两个the_permalink()
和get_permalink()
(化名get_the_permalink()
)接受$论证后,你应该把它作为一个帖子对象。
另外,请注意,如果您要修改自定义帖子类型固定链接生成(输出为get_post_permalink()
),则可以使用与post_type_link
过滤器几乎相同的操作。在这种情况下,回调将获得4个参数:$ post_link,$ post,$ leavename,$ sample。
答
我没有找到一个妥善的解决办法,但你可以在这里生成您的永久链接为岗位类型post
你有$post
WP_Post对象 .. 为什么要用get_post()
因为post_name
(永久)保存在这个领域,它总是会独特。
function edit_the_permalink($permalink) {
$post = get_post(array('post_name' => $permalink));
if($post->post_type == 'post') {
// Override your permalink here for post_type = `post`
echo '<pre>';print_r($post);echo '</pre>';
$permalink = '';
return $permalink;
}
}
add_filter('the_permalink', 'edit_the_permalink', 10, 1);
谢谢,但你确定吗? post_name用于slu((实际上,它是slu)):永久链接是更多作品的组成部分,其中slu is只是最后一个。 – Stratboy
另外,the_permalink过滤器接受2个参数,第二个参数是帖子,所以不需要get_post。请更正您的答案,然后我可以upvote;) 无论如何,我得到的东西,这个过滤器适合我需要的东西,我可以正确地建立永久链接。谢谢。 – Stratboy
@Stratboy我在发布之前测试了我的代码。在我的情况下,第二个参数是返回'0'这就是为什么我使用'get_post'作为永久链接。是**永久链接是更多的作品**和post_name始终是唯一的,所以不用担心使用get_post。 。我很高兴我帮你找到一个方法。 :)谢谢:) – Noman