it-swarm.com.de

Leiten Sie Benutzer basierend auf einem benutzerdefinierten Feld weiter

Ich bin ein Anfänger bei Wordpress und ich bin mir ziemlich sicher, dass das, wonach ich suche, wirklich einfach ist. Ich habe ein Problem mit einer Funktion, die nicht funktioniert:

    function user_homepage() {

    if ( is_user_logged_in() ) {
        $args = array(
            'field'   => 25,
            );
      $user_homepage = bp_profile_field_data( $args );

            if ($user_homepage == 'Sports') {
                $redirect_to = home_url('/sports/');
                wp_redirect( $redirect_to );
                exit;
            }

            else if ($user_homepage == 'Tech') {
                $redirect_to = home_url('/tech/');
                wp_redirect( $redirect_to );
                exit;
            }

    }
}
add_filter('login_redirect','user_homepage',10,3);

Aktualisierte Version, funktioniert immer noch nicht

function redirect_user_homepage() {

        global $bp;

        if ( is_user_logged_in() && is_front_page() ) {
            $args = array(
                'field'   => 25,
                'user_id' => bp_loggedin_user_id()
                );
          $user_homepage = bp_profile_field_data($args);

                if ($user_homepage == "All") {
                    wp_redirect( home_url() );
                    exit;
                }

                elseif ($user_homepage == "Sports") {
                    wp_redirect( home_url('/sports/') );
                    exit;
                }

                elseif ($user_homepage == "Tech") {
                    wp_redirect( home_url('/tech/') );
                    exit;
                }
        }
    }
add_action( 'template_redirect', 'redirect_user_homepage');

Wie Sie sehen, möchte ich meine Benutzer basierend auf einem benutzerdefinierten Feld umleiten, das ich in Buddypress erstellt habe. Darüber hinaus möchte ich nicht, dass sie nach dem Login einfach weitergeleitet werden. Ich möchte, dass sie auf diese Seite weitergeleitet werden, wenn sie auf die Homepage der Website gehen.

Jede Hilfe wäre sehr dankbar! Vielen Dank!

1
Peechaya

Ich habe vergessen, dieses Thema zu aktualisieren. Ich habe mein Problem behoben. Nochmals vielen Dank für die Hilfe!

Folgendes hat bei mir funktioniert:

/**
 * Redirect users to their personalized homepage
 */
function peechaya_user_homepage() {

    global $bp;

    if ( is_user_logged_in() && is_front_page() ) {

        if ( function_exists( 'bp_profile_field_data' ) ) {
                    $args = array(
                'field'   => 25,
                'user_id' => bp_loggedin_user_id()
                        );
            $user_homepage = bp_get_profile_field_data( $args );
        }

        if ( isset( $user_homepage ) ) {
            if ( $user_homepage === 'All' ) {
                /* Default action */
            }
            elseif ( $user_homepage === 'Tech' ) {
                wp_safe_redirect( site_url( '/tech/' ) );
                exit;
            }
            elseif ( $user_homepage === 'Sports' ) {
                wp_safe_redirect( site_url( '/sports/' ) );
                exit;
            }
        }
    }
}
add_action( 'template_redirect', 'peechaya_user_homepage' );
1
Peechaya

Sie benötigen zwei SEPARATE, aber SIMILAR-Funktionen. Ich habe BuddyPress noch nie benutzt, daher muss ich vermuten, dass es einen String zurückgibt, der davon abhängt, wie Ihre Logik geschrieben wurde.

Ich habe dies in einer fast neuen WordPress-Installation getestet und es funktionierte für mich, indem ich die Variable $user_homepage manuell als Standard festlegte, da BuddyPress nicht installiert war. Der function_exists schützt vor Problemen, wenn das Plugin deaktiviert ist oder fehlt.

Ein kurzer Blick auf den bp_profile_field_data sagt mir, dass er einen Feldnamen ausschließt, also würde ich diesen über einer Feld-ID verwenden. Es implizierte auch, dass es den aktuellen Benutzer bekommen könnte/würde, so dass es wahrscheinlich keinen user_id benötigt.

Fröhliches Codieren.

Erfolgreiche Login-Umleitung

/**
 * Redirect Users to Their Home Page Upon Successful Log in
 */
function my_login_redirect( $redirect_url, $request, $user ) {

    if ( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) {
        $user_homepage = null;

        if ( function_exists( 'bp_profile_field_data' ) ) {
            $user_homepage = bp_profile_field_data( array(
                'field' => 'Field Name',
            ) );
        }

        if ( isset( $user_homepage ) ) {
            if ( $user_homepage === 'Sports' ) {
                $redirect_url = home_url( '/sports/' );
            }
            elseif ( $user_homepage === 'Tech' ) {
                $redirect_url = home_url( '/tech/' );
            }
        }
    }

    return $redirect_url;
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

Angemeldete Benutzer-Startseite umleiten

/**
 * Redirect Users to Their Home Page When Hitting the Front Page
 */
function my_template_redirect() {

    if ( is_user_logged_in() && is_front_page() ) {
        $user_homepage = null;

        if ( function_exists( 'bp_profile_field_data' ) ) {
            $user_homepage = bp_profile_field_data( array(
                'field' => 'Field Name',
            ) );
        }

        if ( isset( $user_homepage ) ) {
            if ( $user_homepage === 'Sports' ) {
                wp_safe_redirect( home_url( '/sports/' ) );
                exit;
            }
            elseif ( $user_homepage === 'Tech' ) {
                wp_safe_redirect( home_url( '/tech/' ) );
                exit;
            }
        }
    }
}
add_filter( 'template_redirect', 'my_template_redirect' );
1

Gemäß Ihren Funktionen, wenn Sie Benutzer umleiten möchten, wenn diese die Homepage der Website besuchen. Sie können die Funktion is_front_page () implementieren, um diese zu erkennen und nur umzuleiten, wenn sie sich auf der Startseite befinden.

function user_homepage() {

    if ( is_user_logged_in() ) {
        $args = array(
            'field'   => 25,
        );

        $user_homepage = bp_profile_field_data( $args );

        if ( is_front_page() ) {

            if ($user_homepage == 'Sports') {
                $redirect_to = home_url('/sports/');
                wp_redirect( $redirect_to );
                exit;
            }

            else if ($user_homepage == 'Tech') {
                $redirect_to = home_url('/tech/');
                wp_redirect( $redirect_to );
                exit;
            }
        }
    }
}
add_filter('login_redirect','user_homepage',10,3);
1
Ittikorn S.