自定义固定链接加载模板

时间:2021-05-24 作者:Renan Bessa

我创建了下面的函数来定制特定类别的永久链接。一切正常!

使用此permalink示例访问帖子时。com。br/negocios/name post一切正常。

但如果我通过示例访问这些相同的帖子。com。br/name post它也会加载,因为它是用于404或重定向到创建的永久链接。

add_filter( \'pre_post_link\', \'idinheiro_custom_permalink\', 10, 3 );
function idinheiro_custom_permalink( $permalink, $post ){
    $category = get_the_category($post->ID);
    $slug = $category[0]->slug;
    $tag = \'%postname%\';

    if ( !empty($category) && $slug === \'negocios\' ) {
        $permalink = "/$slug/$tag";
    }

    return $permalink;
}

add_filter( \'generate_rewrite_rules\', \'idinheiro_custom_rewrite_rules\' );
function idinheiro_custom_rewrite_rules( $wp_rewrite ) {
    $new_rules = [
      \'^negocios/([^/]+)/?$\' => \'index.php?name=$matches[1]\',
    ];

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;

    return $wp_rewrite->rules;
}

1 个回复
SO网友:Sally CJ

如果将permalink结构设置为/%postname%/ (带或不带斜杠)。所以如果你想重定向/name-post/negocios/name-post, 一种方法是通过template_redirect hook 像这样:

add_action( \'template_redirect\', \'my_template_redirect\', 1 );
function my_template_redirect() {
    global $wp;
    if ( ! preg_match( \'#^negocios/#\', $wp->request ) &&
        is_single() && in_category( \'negocios\' )
    ) {
        wp_redirect( get_permalink() );
        exit;
    }
}
或者如果你愿意/name-post 要显示404错误页面,则可以使用pre_handle_404 hook:

add_filter( \'pre_handle_404\', \'my_pre_handle_404\', 10, 2 );
function my_pre_handle_404( $preempt, $wp_query ) {
    global $wp;
    if ( ! preg_match( \'#^negocios/#\', $wp->request ) &&
        $wp_query->is_single() && in_category( \'negocios\', $wp_query->post )
    ) {
        $wp_query->set_404();
    }

    return $preempt; // always return it
}
请注意,我进行了检查以确保当前的请求路径(https://example.com/<this part>) 不是以“开始”<新兴市场>新兴市场;避免无限循环/重定向。

相关推荐

Modifying WordPress plugins

关于对WordPress插件进行更改,我有一个非常简单的问题。我为我的问题的简单性道歉,因为我对使用开源代码和插件开发新手非常陌生。我发现了一个插件,它为我正在进行的一个项目提供了一个很好的解决方案。然而,为了更好地满足我的需要,我修改了代码。插件有一个;GPLv2或更高版本“;许可证,基于this 似乎是说对插件的修改很好,只要我注意到我所做的任何更改,并将插件发布在;GPLv2或更高版本“;许可证也是。由于我对插件所做的修改,我希望能够将其作为客户端工作的一部分提供给其他人。然而,我不确定前进的最佳方