it-swarm.com.de

Ist es möglich, Benutzer auf der Grundlage eines auf der Homepage eingegebenen Passworts zu einem bestimmten Beitrag zu leiten?

Ich möchte einen Workflow haben, der so funktioniert:

  1. Erstellen Sie einen Beitrag und weisen Sie ihm ein Passwort zu
  2. Haben Sie ein Einzelfeld-Formular auf der Homepage
  3. Der Benutzer gibt das Passwort auf der Startseite ein und wird an den entsprechenden Post geschickt

Weiß jemand, ob das möglich ist?

3

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();
}
0

Ja, aber Sie müssen die Details für die Zuordnung eines Kennworts zu einem Beitrag speichern.

So:

  • mappings irgendwo speichern, am einfachsten als Hash/Schlüssel-Wert-Paar (password-> post_id)
  • passwort aus dem Feld holen
  • ermitteln Sie post_id und erstellen Sie die URL
  • verwenden Sie wp_redirect () , um den Benutzer umzuleiten.
3
anu

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).

2
Tom J Nowell

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.

1
hakre

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:

  1. Bereinigen Sie die Benutzereingabe (Duh!)
  2. Führen Sie eine benutzerdefinierte Abfrage mit WP_Query aus. In dieser Abfrage können Sie das Argument meta_query verwenden, um nach Posts zu suchen, bei denen das Kennwort vom Benutzer eingegeben wurde.
  3. Laden Sie den gewünschten Beitrag und zeigen Sie ihn an.
1
Chris