it-swarm.com.de

Passwort zum Schutz einer Seite

Ich versuche, eine Seite mit einem Passwort zu schützen, aber es scheint nicht zu funktionieren. Ich habe das Passwort für die Seite festgelegt, aber wenn Sie zu ihr navigieren, wird sie wie gewohnt geladen und fragt nicht nach Passwörtern.

Dies ist die Schleife, die ich auf meiner Seite habe:

<?php
/**
 * @package WordPress
 * @subpackage Default_Theme
 * Template Name: Page
 */

get_header(); ?>

<?php
global $post;
if ( post_password_required( $post ) ) {
?>

<?php $fields = get_acf(); ?>

<script type="text/javascript"> 
(function() { 

window.onload = function() { 

...

}}
) 
</script> 
<div id="map"></div>

<?php } else { ?>
    Not passworded



    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>

        <?php endwhile; ?>
    <?php endif; ?>

       <? 
    } // Page isn't password-protected
    ?>
<?php get_footer(); ?>

Ich möchte alles auf der Seite mit einem Passwort schützen.

AKTUALISIEREN:

Ich habe benutzerdefinierten Inhalt auf der Seite, so dass ich, wenn möglich, in der Lage sein muss, etwas Code um alles zu schreiben.

Aktualisieren: enter image description here

4
Rob

Eine Lösung wäre, eine benutzerdefinierte Seitenvorlage für Seiten zu erstellen, die Sie mit einem Kennwort schützen möchten.

Beginnen Sie mit der Erstellung Ihrer benutzerdefinierten Seitenvorlage, möglicherweise mit dem Namen template-password-protected.php, und fügen Sie das Tag Template: file-docblock wie folgt oben hinzu:

<?php
/**
 * Template: Password-Protected
 */
?>

Fügen Sie nun Ihr grundlegendes Seitenvorlagen-Markup hinzu:

<?php
/**
 * Template: Password-Protected
 */
?>

<?php get_header(); ?>

<div id="main">

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <div id="map" style="width:100%; height:100%"></div>

    <?php endwhile; ?>
<?php endif; ?>

</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Ändern Sie es jetzt so, dass der Standardinhalt ausgegeben wird, wenn die Seite kennwortgeschützt ist:

<?php
/**
 * Template: Password-Protected
 */
?>

<?php get_header(); ?>

<div id="main">

<?php
// Globalize $post
global $post;
// Test for password-protected page
// Returns true if post is password-protected
// and if the password doesn't match cookie
if ( post_password_required( $post ) ) {
    ?>
    <p>
    CUSTOM CONTENT THAT DISPLAYS ONLY WHEN PAGE IS PASSWORD PROTECTED
    GOES HERE
    </p>
    <?php
} else { 
    // Page isn't password-protected
    ?>

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <div id="map" style="width:100%; height:100%"></div>

    <?php endwhile; ?>
<?php endif; ?>

<?php } ?>

</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

EDIT

Basierend auf diesem Kommentar:

Dies scheint nicht zu funktionieren, meine Seite wird normal geladen, unabhängig davon, ob ich angemeldet bin oder nicht.

Ich vermute, dass anstelle von kennwortgeschützten Seiten tatsächlich Seiten nur für angemeldete Benutzer sichtbar sein sollen. (Hinweis: Diese beiden Konzepte sind in WordPress völlig verschiedene Dinge.)

Wenn Sie also mit dieser Annahme arbeiten, möchten Sie is_user_logged_in() anstelle von post_password_required() verwenden.

Hier ist ein Beispiel für eine benutzerdefinierte Seitenvorlage, die auf is_user_logged_in() basiert:

<?php
/**
 * Template: Login-Required
 */
?>

<?php get_header(); ?>

<div id="main">

<?php
// Globalize $post
global $post;
// Test for password-protected page
// Returns true if post is password-protected
// and if the password doesn't match cookie
if ( ! is_user_logged_in() ) {
    ?>
    <p>
    CUSTOM CONTENT THAT DISPLAYS ONLY WHEN USER IS NOT LOGGED IN
    GOES HERE
    </p>
    <?php
} else { 
    // Page isn't password-protected
    ?>

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <div id="map" style="width:100%; height:100%"></div>

    <?php endwhile; ?>
<?php endif; ?>

<?php } ?>

</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Zusammenfassen:

  1. Passwortgeschützter Beitrag/Seite

    Wenden Sie ein Kennwort pro Beitrag/Seite an, das Benutzer eingeben müssen, um den Inhalt des Beitrags/der Seite anzuzeigen. Dieses Kennwort wird im Nachbearbeitungsbildschirm festgelegt und verwendet die in diesem Bildschirm bereitgestellte Benutzeroberfläche, um den Beitrag als kennwortgeschützt festzulegen. Der Inhalt von Posts/Seiten innerhalb der Schleife wird basierend auf dieser Einstellung pro Post automatisch geschützt.

    Aus dem Kodex :

    Passwort diesen Beitrag schützen

    Um einen Beitrag mit einem Kennwort zu schützen, klicken Sie oben rechts im Bereich "Veröffentlichen" auf "Bearbeiten" neben "Sichtbarkeit". Klicken Sie dann auf "Kennwortgeschützt", klicken Sie auf "OK" und geben Sie ein Kennwort ein. Klicken Sie dann auf OK. Hinweis - Editor- und Administratorbenutzer können kennwortgeschützte oder private Beiträge in der Bearbeitungsansicht anzeigen, ohne das Kennwort zu kennen.

  2. Login geschützter Beitrag/Seite

    Trennen Sie einen Beitrag/eine Seite vollständig von kennwortgeschützt. Erfordert das Umschließen von Inhalten in eine is_user_logged_in()-Bedingung und verwendet oder erfordert kein Kennwort pro Post.

EDIT 2

Wenn ich Ihren Code betrachte, muss ich fragen: Wollen Sie diese Karte auf passwortgeschützten Seiten anzeigen? Weil das in deinem Code steht:

<?php
global $post;
if ( post_password_required( $post ) ) {
?>

<?php $fields = get_acf(); ?>

<script type="text/javascript"> 
(function() { 

window.onload = function() { 

...

}}
) 
</script> 
<div id="map"></div>

Dieses Markup lautet: Wenn das Passwort für den Beitrag erforderlich ist, zeigen Sie diese Javascript-Karte an .

Ich vermute, das ist das Gegenteil von dem, was du willst?

Versuchen Sie dies stattdessen:

<?php
/**
 * @package WordPress
 * @subpackage Default_Theme
 * Template Name: Page
 */

get_header(); ?>

<?php
global $post;
if ( post_password_required( $post ) ) {
?>
<p>THIS POST IS PASSWORD PROTECTED. PLEASE ENTER THE PASSWORD TO VIEW THIS POST.</p>

<?php 
} else { 
// No password required, or password has been entered
?>


<?php $fields = get_acf(); ?>

<script type="text/javascript"> 
(function() { 

window.onload = function() { 

...

}}
) 
</script> 
<div id="map"></div>



    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>

        <?php endwhile; ?>
    <?php endif; ?>

       <? 
} // Page isn't password-protected
?>
<?php get_footer(); ?>

Außerdem: Ich würde Ihrer benutzerdefinierten Vorlage einen anderen Namen als "Seite" geben.

EDIT 3

Betreff: dieser Kommentar:

wo würde ich ein Passwort eingeben, um den Inhalt zu sehen?

Sie müssen get_the_password_form() in der Ausgabe post_password_required() einen Aufruf hinzufügen. Hier ist ein Beispiel:

<?php
/**
 * @package WordPress
 * @subpackage Default_Theme
 * Template Name: Page
 */

get_header(); ?>

<?php
global $post;
if ( post_password_required( $post ) ) {
?>
<p>THIS POST IS PASSWORD PROTECTED. PLEASE ENTER THE PASSWORD TO VIEW THIS POST.</p>

<?php echo get_the_password_form(); ?>

<?php 
} else { 
// No password required, or password has been entered
?>


<?php $fields = get_acf(); ?>

<script type="text/javascript"> 
(function() { 

window.onload = function() { 

...

}}
) 
</script> 
<div id="map"></div>



    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>

        <?php endwhile; ?>
    <?php endif; ?>

       <? 
} // Page isn't password-protected
?>
<?php get_footer(); ?>

Nun sollte das Passwortformular erscheinen.

10
Chip Bennett

Verwenden Sie die folgende Funktion in der Schleife, um zu überprüfen, ob der Benutzer den benutzerdefinierten Inhalt sehen darf, den Sie ausblenden möchten:

global $post;
if ( ! post_password_required( $post ) ) {
    // protected content
} else {
    echo get_the_password_form();
}

Der Passwortschutz und das Passwortformular werden nur angezeigt, wenn the_content() oder the_excerpt() aufgerufen werden, es sei denn, Sie verwenden den oben beschriebenen Ansatz.

3
sanchothefat

Hallo Rob, ich kann noch keinen Kommentar abgeben, da ich nicht genug Rechte habe. Ich werde stattdessen eine Antwort hinzufügen, um meine Frage zu stellen.

Diese Seite ist eine normale Seite? Ich meine, Sie können eine Seite nicht mit einem Passwort schützen, wenn diese Seite unter Einstellungen -> Lesen als Startseite oder Blog-Seite markiert ist.

1
chifliiiii

Ein kleines Update. Der Name der Vorlage muss sein

<?php
/**
 * Template Name: Password-Protected
 */
?>

Du hast "name" ausgelassen

0
Ilana