如何在自定义帖子类型URL前面加上自定义帖子分类术语?

时间:2020-10-28 作者:Baptiste

对于我的一个CPT,当默认permalink看起来像示例时。com/CPT\\U slug/%postname%

相反,我想要一个像这样的永久链接:
示例。com/%custom\\u taxonomy\\u term%/CPT\\u slug/%postname%

对于常规类别和帖子,这很容易做到,我只需使用永久链接的%category%/%postname%。

但我无法用CPT和自定义分类法来实现它。我做错了什么?

我的CPT slug是;活动“;,有这样的帖子:“quot;美食之旅“"E;晚餐邮轮。。。我的自定义分类slug是;“代理”;,使用类似“的术语”;“纽约”"E;迈阿密。。。

所以我希望我的URL

(理想情况下,在“相同的slug”情况下,将处理消歧)

我尝试过这种方法:

"rewrite" => array( "slug" => "%agence%/activity", "with_front" => false ),
in register\\u post\\u类型

function add_agence_prefix_in_activity_url( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if ( is_object( $post ) && get_post_type($post) == \'activity\' )
    {
        $terms = wp_get_object_terms( $post->ID, \'agence\' );
        if ( $terms ) {
            return str_replace( \'%agence%\', $terms[0]->slug, $post_link );
        }
    }

    return $post_link;
}
add_filter( \'post_type_link\', \'add_agence_prefix_in_activity_url\', 1, 3 );
它有效:它让我可以显示我的;活动“;发布内容
But I get 404 errors when trying to display posts & pages with their usual /%postname% permalinks; and I don\'t know what to do to fix this.

因此,我尝试使用插件;自定义Post类型Permalinks“:
它几乎可以工作:页面和;帖子不再被破坏,它会给我类似的URLhttps://www.example.com/activity/**new-york**/food-tour
。。。鉴于我想https://www.example.com/**new-york**/activity/food-tour

所以我就快到了,但还不完全到。我应该如何继续?我想做的事可能吗?

1 个回复
SO网友:Baptiste

好的,找到了(a?)解决方案

"rewrite" => array( "slug" => "activity", "with_front" => false ),
以及

function my_injecter_agence_in_activite_url( $post_link, $id = 0 ) {
    $post = get_post( $id );

    if (  $post->post_type == \'activity\'  ||  \'publish\' == $post->post_status  )
    {
        $terms = wp_get_object_terms( $post->ID, \'agence\' );
        if ( $terms )
        {
            $post_link = str_replace("activity", $terms[0]->slug.\'/activite\', $post_link);
            return $post_link;
        }
    }
    return $post_link;
}
add_filter( \'post_type_link\', \'my_injecter_agence_in_activite_url\', 1, 3 );


function my_rewrite_rules()
{
    add_rewrite_rule(
        \'(.*)\\/activity\\/(.*)?$\',
        \'index.php?post_type=activity&name=$matches[2]\',
        \'top\'
    );
}
add_action( \'init\', \'my_rewrite_rules\' );
我很接近。我想我最初的str\\u替换有问题。

现在,帖子、页面或活动都没有被破坏,一切似乎都正常。

URL中用作前缀的自定义分类术语纯粹是修饰性的,如果两个活动具有相同的slug,我无法消除歧义,但我认为这不应该发生,因为WP不允许我有两个具有相同slug的帖子。

现在,我只需要找到一种方法,确保如果在错误的术语中查找活动,就会出现404错误(例如,如果试图访问example.com/newyork/activity/bike tour in miami)

如果有人有更好的方法,请告诉我。

相关推荐

Problem with permalinks

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