Skip to:
Content
Pages
Categories
Search
Top
Bottom

redirecting to user domain using $bp

  • @shaisimchi

    Participant

    Hi,

    I create a function in bp-custom.php that does redirection and hooks to the login process.
    after the function i am adding the action
    add_action(‘wp_login’,’bp_location_redirect_to_page’,100,0);
    the function is declaring global $bp and it seem to work fine except for one thing.
    I am trying to create a redirection as follows:
    $url = $bp->loggedin_user->domain . ‘profile/edit’;
    bp_core_redirect($url);

    for some reason when this redirection is called it is redirecting to the home page and appending the ‘profile/edit’ to it without starting with the user domain (which is working fine for me in other places).
    I know for sure that $bp is declared and working since I am using $bp->loggedin_user->id to run some conditions within the function.
    Any help on this would be appreciated.

    Thanks,

    Shai

Viewing 23 replies - 1 through 23 (of 23 total)
  • @r-a-y

    Keymaster

    You’re using the wrong action.

    I think you should be looking at the “login_redirect” action.

    Also you probably don’t want to redirect to the profile edit page on every single login, so a check should be made to see if (x) profile field is filled in, if it’s not, then continue with the login redirect.

    @shaisimchi

    Participant

    I am testing and only sending to the profile in certain cases.
    it does seem that the redirection is working when the user logs in but the value is wrong.
    according to what you say it should be like this?
    add_action(‘login_redirect’,’bp_location_redirect_to_page’,100,0);
    ??

    @r-a-y

    Keymaster

    Yes, that’s right, but just curious why you have a “0” defined for the number of parameters being passed?

    What does your full function look like?

    @shaisimchi

    Participant

    i tried with the new action – same result.

    here is the function:

    function bp_location_redirect_to_page()
    {
    global $bp,$wpdb;

    $redirect_url_has_location = ‘http://athleticrash.com’;
    $city = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=26” , $bp->loggedin_user->id ));
    $state = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=27” , $bp->loggedin_user->id ));
    $country = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=103” , $bp->loggedin_user->id ));
    $zip = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=23” , $bp->loggedin_user->id ));
    if (!$city || $city==”)
    $has_city=0;
    else
    $has_city=1;

    if (!$state || $state==”)
    $has_state=0;
    else
    $has_state=1;

    if (!$country || $country==”)
    $has_country=0;
    else
    $has_country=1;

    if (!$zip || $zip==”)
    $has_zip=0;
    else
    $has_zip=1;

    $user_link = $bp->loggedin_user->domain;
    $profile_path = ‘profile/edit’;
    $redirect_url_no_location = $user_link . $profile_path;

    if ($has_city==1 && $has_state==1 && $has_country==1 && $has_zip==1 )
    bp_core_redirect($redirect_url_has_location);
    else
    bp_core_redirect($redirect_url_no_location);
    }
    /*Add an action to redirect user after login*/
    add_action(‘login_redirect’,’bp_location_redirect_to_page’,100,0);

    @r-a-y

    Keymaster

    Eek, you shouldn’t have to use $wpdb->get_var when there are a ton of template tags you could use like:

    $city = xprofile_get_field_data( 26, $bp->loggedin_user->id );

    Also you don’t need all those $has_field variables.

    Just do a straight-out, also replace bp_core_redirect() with return:
    if( !empty($city) && ..... )
    return $redirect_url_has_location;

    Also since you’re not using any of the passed variables, just use:
    add_action('login_redirect','bp_location_redirect_to_page',100);

    @shaisimchi

    Participant

    well yeah – these i know and can fix easily but it still doesnt redirect to the right place for some reason

    @r-a-y

    Keymaster

    You shouldn’t use bp_core_redirect, you should be returning the $url. See my code above.

    @shaisimchi

    Participant

    Made the changes and now it doesnt redirect at all as opposed to before when it did redirect but to the wrong place

    @r-a-y

    Keymaster

    Sorry! It should be add_filter, instead of add_action!

    @shaisimchi

    Participant

    same result

    @r-a-y

    Keymaster

    Try this instead:
    http://pastebin.com/M0N9d381

    @shaisimchi

    Participant

    and what do I put for the $user parameter from within bp-custom.php?

    @shaisimchi

    Participant

    I mean what is passed as the $user parameter.
    it seems that the 2 redirect parameters are not in use and the $user – i am not sure how it is passed here.
    I have tried to do something similar (dont worry about the mess now – I just want the redirect to work):
    function my_login_redirect($redirect_to,$redirect_to2,$user_id) {

    global $wpdb,$bp;
    $user_id = $bp->loggedin_user->id;
    $city = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=26” , $user_id ));
    $state = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=27” , $user_id ));
    $country = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=103” , $user_id ));
    $zip = $wpdb->get_var($wpdb->prepare(“SELECT value FROM wp_bp_xprofile_data WHERE user_id=%d AND field_id=23” , $user_id ));
    if (!$city || $city==”)
    $has_city=0;
    else
    $has_city=1;
    if (!$state || $state==”)
    $has_state=0;
    else
    $has_state=1;
    if (!$country || $country==”)
    $has_country=0;
    else
    $has_country=1;
    if (!$zip || $zip==”)
    $has_zip=0;
    else
    $has_zip=1;
    if ($has_city==1 && $has_state==1 && $has_country==1 && $has_zip==1 )
    return ‘http://athleticrash.com’;
    else
    return bp_core_get_user_domain($user_id) . ‘profile/edit/’;
    }
    add_filter(‘login_redirect’,’my_login_redirect’,100,3);

    this gave the same results – just went to the home page.

    @r-a-y

    Keymaster

    In your code, $user_id doesn’t work because you’re not passing the actual user id.
    $user_id->ID would work in this case.

    If you’re wondering what the $user variable is in the login_redirect filter, check it out:
    http://adambrown.info/p/wp_hooks/hook/login_redirect?version=2.9&file=wp-login.php

    Also, have you tried my Pastebin code? It works. I tested it myself.
    Just modify what I have there for your own needs.

    @shaisimchi

    Participant

    i now have this which is your code:

    function my_login_redirect($redirect_to,$redirect_to2,$user) {

    global $bp;

    $city = xprofile_get_field_data(26, $user->ID );
    $state = xprofile_get_field_data(27, $user->ID );
    $country = xprofile_get_field_data(103, $user->ID );
    $zip = xprofile_get_field_data(23, $user->ID );

    if( !empty($city) && !empty($state) && !empty($country) && !empty($zip) )

    return ‘http://athleticrash.com’;

    else

    return bp_core_get_user_domain($user->ID) . ‘profile/edit/’;

    }

    add_filter(‘login_redirect’,’my_login_redirect’,100,3);

    goes to the home page…

    @r-a-y

    Keymaster

    Put it in your theme’s functions.php file.

    @shaisimchi

    Participant

    put it in bp-sn-parent functions.php – goes to home page

    @r-a-y

    Keymaster

    Just try one condition… one xprofile field, and see if it works.
    Also make sure all the xprofile fields you’re checking are blank.

    It’s working fine for me.

    OT: You’re using BP 1.1.3?

    @shaisimchi

    Participant

    yes 1.1.3 and all the fields are blank – i deleted them on the DB

    @shaisimchi

    Participant

    i tried to append $bp->loggedin_user->id to the url just to see what it is and it is 0 so none of the queries are correct too.
    any reason why it would be 0 and not the right user id if i declaried global $bp etc?

    @r-a-y

    Keymaster

    $bp->loggedin_user->id uses wp_current_user, which isn’t available at that stage of the login process.

    The login_redirect filter uses wp_signon:
    http://adambrown.info/p/wp_hooks/hook/login_redirect?version=2.9&file=wp-login.php

    If you use the passed $user variable, you should be able to echo something.
    If you’re using your own code above, try echoing $user->ID.

    @shaisimchi

    Participant

    finally working!
    same code as before but it turns out the filter didnt work because of modifications i made to wp-login.php
    i reverted some of the change there for the filters to work and now the redirection is working.
    thank you so much for your help!!!

    Shai

    @r-a-y

    Keymaster

    @shaisimchi – glad things finally worked! :)

Viewing 23 replies - 1 through 23 (of 23 total)
  • The topic ‘redirecting to user domain using $bp’ is closed to new replies.
Skip to toolbar