Как настроить URL-адрес пользователя в BuddyPress и WordPress?

Спасибо за поддержку! Мне нужно настроить URL-адрес пользователя на моей странице с помощью WordPress и BuddyPress. Это пример:

От: (текущий)

http://example.com/user/pum_su411

Кому

http://example.com/user/548234

С 548234 находится ID пользователя.

Я хочу, чтобы после завершения настройки все пользователи автоматически получали URL, как указано выше.

Спасибо за все решения!


person Sakata Gintoki    schedule 20.03.2014    source источник
comment
Проголосовал за, потому что вопросы buddypress на wordpress.stackexchange.com помечены как не относящиеся к теме   -  person shanebp    schedule 27.03.2014


Ответы (2)


  • добавьте этот код в файл functions.php вашей темы.
    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 );

    function _bp_get_activity_action_pre_meta($content){
        global $bp;
        $fullname = $bp->displayed_user->fullname; // 'slug' - user_nicename
        $user = get_user_by('slug', $fullname);
        if(!is_numeric($user->ID) || empty($fullname)){
            $args = explode(' ', trim(strip_tags($content)));
            $fullname = trim($args[0]);
            $user = get_user_by('slug', $fullname);
        }
        return preg_replace('/href=\"(.*?)\"/is', 'href="'.bp_core_get_user_domain($user->ID, $fullname).'"', $content);
    }

    add_action('bp_get_activity_action_pre_meta', '_bp_get_activity_action_pre_meta');

    add_filter('bp_core_get_userid_from_nicename', '_bp_core_get_userid', 10, 2);
person Luca Filosofi    schedule 27.03.2014
comment
Это работает, но некоторые ссылки также меняются на URL-адрес пользователя. Например, URL-адрес тем, URL-адрес форума ... на вкладке пользователя активности и некоторые функции у меня работают неправильно. Спасибо за поддержку, возможно подожду новых опций в BuddyPress. - person Sakata Gintoki; 28.03.2014
comment
@Been Young: пожалуйста, не могли бы вы привести пример того, какой у вас ури и каким он должен быть? так что я могу это исправить? - person Luca Filosofi; 29.03.2014

Просто потратил немного времени на просмотр документации, кодекса и файлов BuddyPress, и я могу найти способы изменить /user/ часть URL-адреса, но, к сожалению, не /username его сторону.

При чтении он контролируется в ядре BuddyPress, и любые изменения в ядре могут вызвать сбои и, более чем вероятно, вызовут проблемы или перезапись в дальнейшем.

Это не значит, что это невозможно, это, безусловно, возможно, но это потребует серьезного редактирования множества разных файлов, редактирования ряда функций BuddyPress, и нет никаких гарантий, что он будет работать без сбоев. или даже работать дальше, когда файлы обновляются.

Я бы порекомендовал перейти на BuddyPress Trac и добавить билет, чтобы добавить функцию для изменения структуры URL-адреса пользователя. Было бы здорово иметь возможность переключаться между именем пользователя, полным именем, идентификатором или любой другой уникальной идентифицируемой строкой.

Вы можете получить к нему доступ здесь: https://buddypress.trac.wordpress.org/

В качестве альтернативы вы можете попробовать то, что сделал aSeptik выше, но обязательно обновите этот файл с любыми изменениями, когда BuddyPress также обновится.

person Stewartside    schedule 27.03.2014
comment
Тикет создан, спасибо за полезную информацию. Возможно подожду новых опций в BuddyPress. - person Sakata Gintoki; 28.03.2014