Ich möchte einen Workflow haben, der so funktioniert:
Weiß jemand, ob das möglich ist?
Dank Toms Hilfe kam ich zu folgendem Ergebnis: Hierbei wird die integrierte Funktion zum Kennwortschutz für einen Beitrag verwendet, sodass ein Besucher nur ein Kennwort auf der Startseite eingeben muss. Anschließend wird er zum Beitrag weitergeleitet und kann den Inhalt des Beitrags direkt anzeigen, ohne das Kennwort erneut eingeben zu müssen.
Auf der Homepage:
<form method="post" action="">
<input type="password" name="passwordfield">
<input type="hidden" name="homepagepassword" value="1">
<input type="submit" value="Submit">
</form>
In functions.php
(dies könnte natürlich in ein Plugin umgewandelt werden):
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();
}
Ja, aber Sie müssen die Details für die Zuordnung eines Kennworts zu einem Beitrag speichern.
So:
Auf der Homepage:
<form method="post" action="">
<input type="password" name="passwordfield">
<input type="hidden" name="homepagepassword" value="1">
<input type="submit" value="Submit">
</form>
Platziere es in functions.php (erstelle die Datei, falls sie noch nicht existiert und füge <?php
oben hinzu) oder in eine Plugin-Datei:
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');
Fügen Sie Ihrem Beitrag ein benutzerdefiniertes Feld mit dem Schlüssel/Namen password_value
und dem Wert Ihres Passworts hinzu.
Wenn Sie diesen Schritt überspringen und das Kennwort verwenden möchten, das Wordpress verwendet, um den Beitrag direkt zu sperren, müssen Sie $wpdb
und eine SQL-Abfrage verwenden und das Kennwort vorher überprüfen.
edit: Ich habe dies aktualisiert, um den 'init'-Hook zu verwenden. Sie können den Code in einer Plugin-Datei anstelle von functions.php ablegen, wenn Sie möchten dies soll themenunabhängig sein. (Obwohl Sie das Formular-Markup noch irgendwo platzieren müssen).
Ich würde das stattdessen mit einem Plugin machen. Das Plugin könnte das Passwort weiterhin mit dem Beitrag teilen und das Cookie entsprechend einstellen, sodass die Seite ohne Eingabe des Passworts nicht zugänglich ist.
Ein Plugin, denn um ein manuelles Mapping zu haben, wäre die Suche, welches Passwort zu welchem Beitrag gehört, ohne ein solches Mapping sehr teuer. Nicht nützlich an einem zentralen Ort wie der Homepage.
Sind die Passwörter, die Sie für jeden Beitrag erstellen, eindeutig? Wenn nicht, wie können Sie feststellen, nach welchem Beitrag ein Benutzer sucht?
Angenommen, Sie behalten jedes Passwort eindeutig bei, würde ich das Passwort als Post-Meta speichern. Sie können eine benutzerdefinierte Meta-Box erstellen, in der das Kennwort eingegeben und gespeichert werden kann.
Wenn dann ein Benutzer das Passwort auf der Homepage eingibt: