web-dev-qa-db-fra.com

Est-il possible de diriger les utilisateurs vers un poste en fonction d'un mot de passe saisi sur la page d'accueil?

J'aimerais pouvoir disposer d'un flux de travail qui fonctionne comme suit:

  1. Créer une publication et lui attribuer un mot de passe
  2. Avoir un formulaire à un seul champ sur la page d'accueil
  3. L'utilisateur entre le mot de passe sur la page d'accueil et est envoyé à la poste correspondante

Est-ce que quelqu'un sait si c'est possible?

3
Travis Northcutt

Merci à l'aide de Tom, voici ce que j'ai fini avec. Ceci utilise la fonctionnalité intégrée pour protéger un message par un mot de passe. Ainsi, un visiteur doit uniquement entrer un mot de passe sur la page d'accueil. Il est ensuite dirigé vers le message et peut afficher directement le contenu du message sans le ressaisir.

Sur la page d'accueil:

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

Dans functions.php (bien sûr, cela pourrait être converti en plugin):

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
Travis Northcutt

Oui, mais vous aurez besoin de savoir comment un mot de passe est associé à un message.

Alors:

  • stocke les mappages quelque part, plus facile comme paire de hachage/clé-valeur (password-> post_id)
  • obtenir le mot de passe du champ
  • déterminer post_id et construire l'URL
  • utilisez wp_redirect () pour rediriger l'utilisateur.
3
anu

Sur la page d'accueil:

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

Placez dans functions.php (créez le fichier s'il n'existe pas déjà et ajoutez <?php en haut) ou dans un fichier plugin:

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

Ajouter un champ personnalisé à votre message avec la clé/nom password_value et la valeur étant votre mot de passe.

Si vous souhaitez ignorer cette étape et utiliser le mot de passe utilisé par Wordpress pour verrouiller directement la publication, vous devez utiliser $wpdb et une requête SQL, ainsi que le mot de passe que vous avez vérifié précédemment.

edit: J'ai mis à jour ceci pour utiliser le hook 'init', vous pouvez mettre le code dans un fichier plugin à la place de functions.php si vous voulez cela être thème indépendant. (Bien que vous ayez toujours besoin de mettre le balisage de formulaire quelque part).

2
Tom J Nowell

Je ferais cela avec un plugin à la place. Le plug-in pouvait toujours partager le mot de passe avec la publication et définir le cookie de manière appropriée pour que la page ne soit pas accessible sans entrer le mot de passe.

Un plugin car pour avoir un mapping manuel, la recherche du mot de passe correspondant à quel poste serait vraiment chère sans un tel mapping. Pas utile dans un endroit central comme la page d'accueil.

1
hakre

Les mots de passe que vous créez pour chaque message seront-ils uniques? Sinon, comment pourrez-vous identifier la publication recherchée par un utilisateur?

En supposant que vous gardiez chaque mot de passe unique, je stockerais le mot de passe comme post-meta. Vous pouvez créer une méta-boîte personnalisée permettant de saisir/stocker le mot de passe.

Ensuite, lorsqu'un utilisateur entre le mot de passe sur la page d'accueil:

  1. Désinfectez l'entrée utilisateur (Duh!)
  2. Exécutez une requête personnalisée à l'aide de WP_Query . Dans cette requête, vous pouvez utiliser l'argument meta_query pour rechercher les publications pour lesquelles le mot de passe est entré par l'utilisateur.
  3. Charger et afficher la publication requise.
1
Chris