web-dev-qa-db-fra.com

Rediriger les utilisateurs en fonction du champ personnalisé

Je suis novice chez Wordpress et je suis sûr que ce que je recherche est vraiment facile. J'ai un problème avec une fonction qui ne fonctionne pas:

    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);

Version mise à jour, ne fonctionne toujours pas

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');

Comme vous pouvez le constater, je souhaite rediriger mes utilisateurs en fonction d’un champ personnalisé que j’ai créé dans Buddypress. Mais plus que cela, je ne veux pas qu'ils soient simplement redirigés après la connexion, je veux qu'ils soient redirigés vers cette page quand ils vont à la page d'accueil du site.

Toute aide serait grandement appréciée! Merci!

1
Peechaya

J'ai oublié de mettre à jour ce sujet. J'ai résolu mon problème. Merci encore pour votre aide!

Voici ce qui a fonctionné pour moi:

/**
 * 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

Vous allez avoir besoin de deux fonctions SEPARATE mais SIMILAR. Je n'ai jamais utilisé BuddyPress, donc je dois deviner que cela retourne une chaîne basée sur la façon dont votre logique a été écrite.

J'ai testé cela sur une nouvelle installation de WordPress et cela a fonctionné pour moi en définissant manuellement la variable $user_homepage comme valeur par défaut car je n'avais pas installé BuddyPress. Le function_exists aide à vous protéger contre les problèmes lorsque le plug-in est désactivé ou manquant.

Un coup d’œil rapide sur le bp_profile_field_data me dit qu’il excepte un nom de champ, je l’utiliserais donc sur un identifiant de champ. Cela impliquait également qu'il pourrait/voudrait obtenir l'utilisateur actuel, de sorte qu'il n'a probablement pas besoin d'un user_id.

Bonne codage.

Redirection de connexion réussie

/**
 * 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 );

Connecté à la redirection de la page d'accueil de l'utilisateur

/**
 * 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
dylanjameswagner

Selon vos fonctions, si vous souhaitez rediriger les utilisateurs lorsqu'ils visitent la page d'accueil du site Web. Vous pouvez implémenter la fonction is_front_page () pour détecter et rediriger les redirections uniquement si elles se trouvent sur la page d'accueil.

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.