使用昵称或用户ID更改Buddypress中的用户个人资料网址

时间:2014-10-14 17:12:05

标签: wordpress url profile buddypress userid

我正在使用此代码,该代码部分用于将buddypress和wordpress中的配置文件网址从“http:/ mywebsite / user / username”更改为“http:/ mywebsite / user / userid”

    function _bp_core_get_user_domain($domain, $user_id, $user_nicename = false, $user_login = false) {
    if ( empty( $user_id ) ){
        return;
    }
    if( isset($user_nicename) ){
        $user_nicename = bp_core_get_username($user_id);
    }
    $after_domain =  bp_get_members_root_slug() . '/' . $user_id;

    $domain = trailingslashit( bp_get_root_domain() . '/' . $after_domain );
    $domain = apply_filters( 'bp_core_get_user_domain_pre_cache', $domain, $user_id, $user_nicename, $user_login );
    if ( !empty( $domain ) ) {
        wp_cache_set( 'bp_user_domain_' . $user_id, $domain, 'bp' );
    }
    return $domain;
}

add_filter('bp_core_get_user_domain', '_bp_core_get_user_domain', 10, 4);

function _bp_core_get_userid($userid, $username){
    if(is_numeric($username)){
        $aux = get_userdata( $username );
        if( get_userdata( $username ) )
            $userid = $username;
    }
    return $userid;
}

add_filter('bp_core_get_userid', '_bp_core_get_userid', 10, 2);

function _bp_get_activity_parent_content($content){
    global $bp;
    $user = get_user_by('slug', $bp->displayed_user->fullname); // 'slug' - user_nicename
    return preg_replace('/href=\"(.*?)\"/is', 'href="'.bp_core_get_user_domain($user->ID, $bp->displayed_user->fullname).'"', $content);
}

add_filter( 'bp_get_activity_parent_content','_bp_get_activity_parent_content', 10, 1 );

add_filter('bp_core_get_userid_from_nicename', '_bp_core_get_userid', 10, 2);

此刻它对我来说非常合适但不在这个小地方(见图片):

http://i.imgur.com/4dX0RUB.png

- 活动开始消息的作者的url更改在两个组活动和个人活动中都不起作用

  • url更改活动的作者REPLY正在运行

我不知道我是否正在解释我遇到的问题,但我希望你能理解。

感谢您的回答

PS:感谢来自StackExchange的aSeptik代码

1 个答案:

答案 0 :(得分:0)

优雅地飞行是不可能的。 BuddyPress活动组件以这样的方式开发,即活动流中具有用户链接的文本(对于站点范围,个人和组)直接作为action存储在数据库中。只需查看数据库中的wp_bp_activityaction字段即可。

所以你应该过滤掉preg_replace它。我想你知道你在渲染速度损失方面正在惩罚自己。