J'aimerais pouvoir disposer d'un flux de travail qui fonctionne comme suit:
Est-ce que quelqu'un sait si c'est possible?
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();
}
Oui, mais vous aurez besoin de savoir comment un mot de passe est associé à un message.
Alors:
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).
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.
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: