web-dev-qa-db-ja.com

ホームページに入力されたパスワードに基づいて特定の投稿にユーザーを誘導することは可能ですか?

私はそのように機能するワークフローを手に入れたいです。

  1. 投稿を作成してパスワードを割り当てる
  2. ホームページにシングルフィールドフォームを作成する
  3. ユーザーがホームページでパスワードを入力し、対応する投稿に送信されます

これが可能かどうか誰かが知っていますか?

3

トムの助けのおかげで、ここに私がやって来たものがあります。これは、投稿をパスワードで保護するための組み込み機能を使用するため、訪問者はホームページでパスワードを入力するだけでよく、その後投稿に移動し、パスワードを再入力することなく投稿のコンテンツを直接表示できます。

ホームページ上:

<form method="post" action="">
    <input type="password" name="passwordfield">
    <input type="hidden" name="homepagepassword" value="1">
    <input type="submit" value="Submit">
</form>

functions.phpでは(もちろんこれはプラグインに変換できます):

if(isset($_POST['homepagepassword'])){

    global $wpdb;

    $post_password = $_POST['passwordfield'];
    $post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %d", $post_password) );
    $q = new WP_Query( 'p=$post_id' );
    if($q->have_posts()){
        while($q->have_posts()){
            $q->the_post();
            wp_redirect(get_permalink());
            die();
        }
    } else {
        // oh dear, there isnt a post with this 'password', put a redirect to a fallback here
        wp_redirect('http://www.google.com');
        die();
    }
    wp_reset_query();
}
0

はい。ただし、パスワードが投稿にどのように対応するかの詳細を保持する必要があります。

そう:

  • マッピングをどこかに保存します。ハッシュ/キーと値のペアとして最も簡単です(password-> post_id)。
  • フィールドからパスワードを取得
  • post_idを決定し、URLを作成します
  • ユーザーをリダイレクトするには、 wp_redirect() を使用します。
3
anu

ホームページ上:

<form method="post" action="">
    <input type="password" name="passwordfield">
    <input type="hidden" name="homepagepassword" value="1">
    <input type="submit" value="Submit">
</form>

Functions.phpに配置する(存在しない場合はファイルを作成し、先頭に<?phpを追加する)またはプラグインファイルに配置する:

function doPasswordStuff(){
    if(isset($_POST['homepagepassword'])){
        $pass = $_POST['passwordfield'];
        $q = new WP_Query( array( 'meta_key' => 'password_value', 'meta_value' => $pass));
        if($q->have_posts()){
            while($q->have_posts()){
                $q->the_post();
                wp_redirect(get_permalink());
                die();
            }
        } else {
            // oh dear, there isnt a post with this 'password', put a redirect to a fallback here
            wp_redirect('http://www.google.com');
            die();
        }
        wp_reset_query();
    }
}
add_action('init','doPasswordStuff');

キー/名前password_valueと値をパスワードにして、カスタムフィールドをあなたの投稿に追加してください。

このステップをスキップして、Wordpressが投稿を直接ロックするために使用するパスワードを使用する場合は、$wpdbとSQLクエリを使用し、事前に確認したパスワードをハッシュする必要があります。

edit: 'init'フックを使うようにこれを更新しました。必要ならば、functions.phpの代わりにプラグインファイルにコードを入れることができます。これはテーマに依存しません。 (あなたはまだどこかにフォームマークアップを置く必要があるでしょうが)。

2
Tom J Nowell

代わりにプラグインを使います。プラグインはまだパスワードを投稿と共有し、クッキーを適切に設定して、パスワードを入力しないとページにアクセスできない可能性があります。

手動マッピングがあるため、どのパスワードがどの投稿に属しているかの検索は、このようなマッピングがないと非常に高コストになります。ホームページのような中心的な場所では役に立ちません。

1
hakre

各投稿に対して作成したパスワードは一意になりますか。そうでない場合、どの投稿をユーザーが探しているのかをどのように識別できるでしょうか。

あなたがそれぞれのパスワードをユニークに保っていると仮定すると、私はパスワードをpost-metaとして保存するでしょう。パスワードの入力/保存を可能にする カスタムメタボックス を作成できます。

次に、ユーザーがホームページでパスワードを入力すると、

  1. ユーザー入力をサニタイズします(当たり前)
  2. WP_Query を使用してカスタムクエリを実行します。このクエリでは、meta_query引数を使用して、ユーザーが入力したパスワードを持つ投稿を検索できます。
  3. 必要な投稿を読み込んで表示します。
1
Chris