在不使用插件的情况下更改自定义角色的作者插件

时间:2019-03-06 作者:saurav.rox

我正在尝试将author slug更改为自定义角色。我的插件添加了一个名为trip\\u vendor的角色,但我只想更改此角色的作者slug。我有一个函数,但这会更改每个角色的作者slug,以便新urlexample.com/operator/user.

add_filter( \'init\', array( $this, \'wpte_vendor_profile_url\' ) );        
function wpte_vendor_profile_url()
{
        global $wp_rewrite;
        $author_slug = \'operator\';
        $wp_rewrite->author_structure = \'/\' . $author_slug . \'/%author%\';
}
我按建议试过了here 但没有任何帮助。

任何帮助都是非常可观的。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

您可以使用add_permastruct() (带ep_mask 设置为EP_AUTHORS) 要添加正确的重写规则author_link 筛选以设置正确的作者URL:

add_action( \'init\', function(){
    add_permastruct( \'%author_trip_vendor%\', \'operator/%author%\', [
        \'ep_mask\' => EP_AUTHORS,
    ] );
} );

add_filter( \'author_link\', function( $link, $author_id, $author_nicename ){
    if ( user_can( $author_id, \'trip_vendor\' ) ) {
        $link = \'/operator/\' . $author_nicename;
        $link = home_url( user_trailingslashit( $link ) );
    }
    return $link;
}, 10, 3 );
不要忘记刷新重写规则—只需访问永久链接设置页面。

更新URL上加载了非供应商配置文件example.com/operator/admin 而且还在example.com/author/admin

您可以通过以下选项之一进行修复:

发送“404”标题(“未找到页面”错误)

add_action( \'parse_request\', function( $wp ){
    if ( preg_match( \'#^(author|operator)/([^/]+)#\', $wp->request, $matches ) ) {
        $user = get_user_by( \'login\', $matches[2] );
        if (
            ( \'author\' === $matches[1] && $user && user_can( $user, \'trip_vendor\' ) ) ||
            ( \'operator\' === $matches[1] && $user && ! user_can( $user, \'trip_vendor\' ) )
        ) {
            $wp->query_vars = [\'error\' => 404];
        }
    }
} );
将用户重定向到正确的“操作员”URL

add_action( \'parse_request\', function( $wp ){
    if ( preg_match( \'#^(author|operator)/([^/]+)#\', $wp->request, $matches ) ) {
        $user = get_user_by( \'login\', $matches[2] );
        if (
            ( \'author\' === $matches[1] && $user && user_can( $user, \'trip_vendor\' ) ) ||
            ( \'operator\' === $matches[1] && $user && ! user_can( $user, \'trip_vendor\' ) )
        ) {
            $base = ( \'author\' === $matches[1] ) ? \'operator\' : \'author\';
            wp_redirect( home_url( \'/\' . $base . \'/\' . $matches[2] ) );
            exit;
        }
    }
} );

相关推荐

Force pretty permalinks?

我正在构建一个插件,该插件将用于单个站点,并依赖于add_rewrite_rule 要工作,需要打开永久链接。打开它们并不困难,因为它只是一个站点,但我担心其中一个管理员可能会在不知道自己在做什么的情况下关闭它,并破坏该站点。如何以编程方式强制保持漂亮的永久链接?