如何更改单个帖子永久链接的默认结构生成?

如何更改单个帖子永久链接的默认结构生成?

问题描述:

我想改变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你有$postWP_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); 
+0

谢谢,但你确定吗? post_name用于slu((实际上,它是slu)):永久链接是更多作品的组成部分,其中slu is只是最后一个。 – Stratboy

+0

另外,the_permalink过滤器接受2个参数,第二个参数是帖子,所以不需要get_post。请更正您的答案,然后我可以upvote;) 无论如何,我得到的东西,这个过滤器适合我需要的东西,我可以正确地建立永久链接。谢谢。 – Stratboy

+0

@Stratboy我在发布之前测试了我的代码。在我的情况下,第二个参数是返回'0'这就是为什么我使用'get_post'作为永久链接。是**永久链接是更多的作品**和post_name始终是唯一的,所以不用担心使用get_post。 。我很高兴我帮你找到一个方法。 :)谢谢:) – Noman