web-dev-qa-db-ja.com

カスタムフィールドに基づいてユーザーをリダイレクトする

私はWordpressの初心者だし、探しているものが本当に簡単だと確信しています。機能しないという問題があります。

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

更新版、まだ動作しない

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

ご覧のとおり、私はBuddypressで作成したカスタムフィールドに基づいてユーザーをリダイレクトしたいと思います。しかしそれ以上に、ログイン後に単にリダイレクトされるのではなく、Webサイトのホームページにアクセスしたときにこのページにリダイレクトされるようにしたいのです。

任意の助けは大歓迎です!ありがとうございます。

1
Peechaya

このトピックを更新するのを忘れました。問題を解決しました。助けてくれてありがとう!

これは私のために働いたものです:

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

あなたは2つの別々だが類似した機能を必要とするでしょう。私はBuddyPressを使ったことがないので、ロジックがどのように書かれたかに基づいて文字列を返すことを推測しなければなりません。

私はほぼ新しいWordPressのインストールでこれをテストし、BuddyPressがインストールされていないので手動でデフォルトとして$user_homepage変数を設定することでうまくいきました。 function_existsは、プラグインが無効化されているか存在しない場合に問題から保護するのに役立ちます。

bp_profile_field_dataをちょっと見てみると、それはフィールド名を除いてそれを教えてくれるので、私はそれをフィールドIDの上に使います。また、現在のユーザーを取得できる可能性があるため、user_idを必要としない可能性もあります。

ハッピーコーディング.

成功したログインリダイレクト

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

ログインユーザーフロントページリダイレクト

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

あなたの機能によると、あなたは彼らがウェブサイトのホームページを訪れているときにユーザーをリダイレクトしたい場合。 is_front_page() 関数を実装して、フロントページにある場合にのみ検出してリダイレクトすることができます。

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.