web-dev-qa-db-ja.com

フロントエンドログイン:作成した投稿にユーザーをリダイレクトします

フロントエンドログインのユーザーを作成した投稿にリダイレクトすることは可能ですか?

私はフロントエンドに以下のフォームを持っています。

私はフロントエンド登録プロセスを作成しました。それは新しいユーザーと投稿を作成し、その投稿に特定の詳細を記入します。そのプロセスが完了すると、作成したばかりの投稿に送信されます。これにより、すべての詳細をフロントエンドで編集できます。これは初めての登録者にとっては完璧に機能しますが、すでに登録していてログインしたい人たちでは私が望むことを達成することはできません。

下のフォームに詳細を記入したら、登録時に作成した投稿にリダイレクトしたいのですが、可能ですか。

ユーザーはプロフィールとして機能しているONE投稿...しか作成できません。だから私は彼らがログインして彼らのプロフィールにリダイレクトされることができることを望みます。

助けになれば、ユーザー名は役職の役職と同じです(ユーザー名は人物の会社名で、役職の名前でもあります)。

            <?php if (!(current_user_can('level_0'))){ ?>   
                <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post" id="login-form">
                    <p style="color:black!IMPORTANT;">Please login.</p>
                    <!--[if !(IE)]><!-->
                        <input type="text" placeholder="Username" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" />
                    <!--<![endif]-->
                    <!--[if (gte IE 6)]>
                        <input type="text" name="log" id="log" value="Username" />
                    <![endif]-->
                    <!--[if !(IE)]><!-->
                        <input type="password" placeholder="Password" name="pwd" id="pwd" />
                    <!--<![endif]-->
                    <!--[if (gte IE 6)]>
                        <input type="password" value="Password" name="pwd" id="pwd" />
                    <![endif]-->    
                    <p style="clear:both;width:115px;font-size:14px!IMPORTANT;float:left;">
                        <input style="width:14%!IMPORTANT;" name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me
                    </p>


                    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
                    <p style="float:right;">
                        <a style="font-size:14px!IMPORTANT;" href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
                    </p>                                
                    <input style="margin-left:80px;float:left;" type="submit" name="submit" value="LOGIN" class="login-button" />                               
                </form>
                <div class="clear"></div>
            <?php } else { ?>
                <p>
                    You are currently logged in, would you like to <a href="<?php echo wp_logout_url($_SERVER['REQUEST_URI']); ?>">logout</a>?
                </p>
            <?php } ?>  

私は以下を推測しています...

ユーザー名(上のフォームに入力されたもの)で何かをして、それを投稿の作者と一致させる必要があります。それが一致する場合は、そのページにそれらを送信してください。これは隠しフィールドの前に行う必要があるため、隠し入力値にユーザー名フィールドを入力できます。

3
Rob

私があなたであれば、wp_login_form関数を使ってあなたのフォームを作成するでしょうが、あなたはすべてが正しいと思うように見えますし、手動フォームを使う理由があるのか​​もしれません。

<?php wp_login_form(); ?>

いずれにせよ、あなたはログインリダイレクトを更新するためにこのアクションを使うことができます、そしてそれをfunctions.phpに追加します:

add_action( 'login_redirect', 'custom_redirect_login', 10, 3 );

function custom_redirect_login( $redirect_to, $request, $user )
{
    $posts = get_pages( array(
        'authors' => $user->ID
    ) );
    if (! empty($posts) )
    {
        // Since the pages are listed in DESC order, the first one is the most
        // recently created.
        return get_permalink($posts[0]->ID);
    }
    else
    {
        // If no posts associated with the user, use default.
        return $redirect_to;
    }
}

すでに述べたように、ページではなくpostまたはcustom_post_typeにリダイレクトする必要がある場合は、ページ固有ではない方法を使用する必要があります。したがって、これはより普遍的に機能するため、これをお勧めします。

function custom_redirect_login( $redirect_to, $request, $user )
{
    $posts = new WP_Query( array( 'author' => $user->ID ) );
    if ($posts->have_posts())
    {
        // Since the pages are listed in DESC order, the first one is the most
        // recently created.
        return get_permalink($posts->posts[0]->ID);
    }
    else
    {
        // If no posts associated with the user, use default.
        return $redirect_to;
    }
}
3
Jake

作成され情報を格納するアイテムは、「ページ」または「投稿」です。

それが前の答えでフィルタの「投稿」get_pagesであるならばうまくいきません(それは「ページ」の投稿タイプを持つアイテムだけを取得します)。このフィルタを試してみてください。

function custom_redirect_login( $redirect_to, $request, $user )
{
    $posts = new WP_Query( 'author='.$user->ID );
    if ($posts->have_posts())
    {
        // Since the pages are listed in DESC order, the first one is the most
        // recently created.

        return get_permalink($posts->posts[0]->ID);
    }
    else
    {
        // If no posts associated with the user, use default.
        return $redirect_to;
    }
}
2
Warwick

これは現在うまくいきますが、少し汚れています。もっと良い方法があるなら、私はむしろそれを使いたいです。

<script>
function onSubmit(){
    var str = document.forms["login"]["log"].value;
    var str = str.replace(/\s+/g, '-').toLowerCase();
    document.forms["login"]["redirect_to"].value = str;
}
</script>                   

                    <?php if (!(current_user_can('level_0'))){ ?>   
                        <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post" name="login" onsubmit="onSubmit()">
                            <p style="color:black!IMPORTANT;">Please login.</p>
                            <!--[if !(IE)]><!-->
                                <input type="text" placeholder="Username" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" />
                            <!--<![endif]-->
                            <!--[if (gte IE 6)]>
                                <input type="text" name="log" id="log" value="Username" />
                            <![endif]-->
                            <!--[if !(IE)]><!-->
                                <input type="password" placeholder="Password" name="pwd" id="pwd" />
                            <!--<![endif]-->
                            <!--[if (gte IE 6)]>
                                <input type="password" value="Password" name="pwd" id="pwd" />
                            <![endif]-->    
                            <p style="clear:both;width:115px;font-size:14px!IMPORTANT;float:left;">
                                <input style="width:14%!IMPORTANT;" name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me
                            </p>


                            <input type="hidden" name="redirect_to" value="" />
                            <p style="float:right;">
                                <a style="font-size:14px!IMPORTANT;" href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
                            </p>                                
                            <input style="margin-left:80px;float:left;" type="submit" name="submit" value="LOGIN" class="login-button" />                               
                        </form>
                        <div class="clear"></div>
                    <?php } else { ?>
                        <p>
                            You are currently logged in, would you like to <a href="<?php echo wp_logout_url($_SERVER['REQUEST_URI']); ?>">logout</a>?
                        </p>
                    <?php } ?>
2
Rob

多分あなたはここに私の質問で答えを見つけることができます: どのようにソーシャルログイン登録ユーザーからユーザーメタを取得するには?

私はGravityformsを使ってフロントエンドからページを1つだけ作成し(page.phpをテンプレートとして)、送信後にそれらを新しく作成したページに誘導します。 (ページを作成する機能を除くすべての作り付けGravityforms設定、しかしあなたは私のリンクでそれを見つけることができます)

しかし、ユーザーが戻ってきたら、フォームではなく自分のページへのリンクを含むウェルカムメッセージを表示するようにします(したがって、ユーザーは1回しかフォームに記入しないでください)。

管理者ダッシュボードを介して管理者によって登録されたユーザーにはうまく機能します。しかし、ソーシャルログインプラグインを介して登録されたユーザーには機能しません。 (それが私の質問です)

だから、私のリンクの背後にある質問の一部はあなたの答えかもしれませんが、あなたがユーザーがソーシャルログインを介して登録するのが好きなら、あなたも私の質問の答えを見つけたいと思うでしょう。 ;-)

助けになれば幸いです。

0
tobe