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

How to change the default structure generation of single post permalinks?

我想更改 the_permalink() 函数的输出等。所以,我不想更改所有 post 类型的 mermalink 结构,只更改 'post' post 类型,并且只更改单个页面。

我已经更改了重写规则,因此

mysite.com/news/2016/the-news-title  

会将用户引导至单个 post 页面模板并正确显示内容。美好的。 现在,正如我所说,我希望 the_permalink() 函数生成具有该结构的链接。

我该怎么做?

我没有找到合适的解决方案,但您可以在此处为 post 类型生成永久链接 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 我自己的答案。如果 post_type == 'post',我可以过滤并修改输出 'the_permalink'。基本代码:

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())都接受 $post 参数,您应该将其作为 post 对象传递.

此外,请注意,如果您想修改自定义 post 类型的永久链接生成(get_post_permalink() 的输出),您可以使用 post_type_link 过滤器执行几乎相同的操作。在这种情况下,回调将接收 4 个参数:$post_link、$post、$leavename、$sample.