具有自定义URL结构的自定义帖子类型Single

时间:2019-05-20 作者:Razvan Cuceu

我有一个函数,可以在post slug之前重写URL,包括自定义分类法

function wpa_show_permalinks( $post_link, $post ){
if ( is_object( $post ) && $post->post_type == \'aktuelles\' ){
    $terms = wp_get_object_terms( $post->ID, \'nachrichtenkategorie\' );
    if( $terms ){
        return str_replace( \'%nachrichtenkategorie%\' , $terms[0]->slug , $post_link );
    }
}
return $post_link;
}

add_filter( \'post_type_link\', \'wpa_show_permalinks\', 1, 2 );
该函数工作正常,可以替换%nachrichtenkategorie% 从存档访问时在URL中

获取帖子的永久链接get_permalink(123) 不替换%nachrichtenkategorie% 因此,url中出现服务器错误。

我做错了什么?可能是过滤器post_type_link 应在其他内容中进行更改,以在显示url之前替换url中的字符串。有什么想法吗?谢谢

1 个回复
SO网友:Ted Stresen-Reuter

您使用的代码看起来有效,因此…

在继续之前,请检查您正在测试的帖子是否具有您希望找到(并替换)的术语。换句话说,验证您的输入是否有效。

此外,您可以考虑在URL上直接替换字符串,因为如果搜索词不存在,就不会造成任何伤害。也就是说,例如,如果帖子名称中确实存在搜索词,那么它将产生意外的后果,因此,您还可以考虑使搜索更加具体(例如在搜索词中添加/(斜杠))。

假设输入有效,您还可以考虑在重写规则(在apache或nginx中)而不是在PHP中进行此更改。原因是,如果您移动到一个新主题,例如,功能不会改变(甚至可能比在PHP中处理每个请求都要快)。

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。