Protezione con password di una pagina

12 ott 2011, 18:33:06
Visualizzazioni: 15.5K
Voti: 7

Sto cercando di proteggere una pagina con password ma non sembra funzionare. Ho impostato la password per la pagina ma quando si naviga su di essa si carica normalmente e non richiede alcuna password.

Questo è il loop che ho nella mia pagina:

<?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 { ?>
    Non protetto da password



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

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

       <? 
    } // La pagina non è protetta da password
    ?>
<?php get_footer(); ?>

Voglio proteggere con password tutto il contenuto all'interno della pagina.

AGGIORNAMENTO:

Ho contenuti personalizzati nella pagina quindi, se possibile, ho bisogno di poter avvolgere del codice intorno a tutto.

Aggiornamento: inserire qui la descrizione dell'immagine

6
Commenti

Cosa significa "si carica normalmente"? E cosa si intende con "tutto all'interno della pagina"? Succede lo stesso se sei disconnesso?

Michael Michael
13 ott 2011 00:08:48

@Michael Se digito l'indirizzo della pagina, si carica senza chiedere password ecc. Ho effettuato il logout dall'amministrazione di WP e ho provato ma succede ancora la stessa cosa.

Rob Rob
13 ott 2011 11:46:37

Puoi fornire il contenuto completo (anziché solo il Loop) del file template rilevante per questa Pagina protetta da password?

Chip Bennett Chip Bennett
1 nov 2011 19:01:44

@ChipBennett Sarebbe più facile visualizzare il sorgente di http://www.mediwales.com/mapping/members. A parte il ciclo che ho postato, il resto è tutto visibile nel sorgente.

Rob Rob
1 nov 2011 19:04:17

@Rob questo non aiuta. Il PHP non è visibile nel sorgente del browser, poiché è già stato analizzato e renderizzato in HTML. Dobbiamo vedere il sorgente PHP, non l'HTML renderizzato.

Chip Bennett Chip Bennett
1 nov 2011 19:05:33

@Rob, guarda la risposta di Chip Bennet qui sotto, ha ragione. Il problema è che non hai un form nella tua pagina. Quando proteggi con password un post in WordPress, anche se è un custom post type, devi avere un form all'interno del template che protegga il contenuto che non vuoi sia visto. Se vuoi proteggere l'intera pagina, la protezione tramite password nell'admin non è il modo giusto per farlo.

eileencodes eileencodes
1 nov 2011 19:54:26
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 4
15
14

Una soluzione potrebbe essere quella di creare un template personalizzato per Pagine per le Pagine che intendi proteggere con password.

Inizia creando il tuo template personalizzato per Pagine, ad esempio chiamato template-password-protected.php, e aggiungi il tag Template: nel file-docblock in cima, in questo modo:

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

Ora, aggiungi il markup base del template per Pagine:

<?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(); ?>

Ora, modificarlo in modo che venga visualizzato il contenuto predefinito se la pagina è protetta da password:

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

<?php get_header(); ?>

<div id="main">

<?php
// Globalizza $post
global $post;
// Verifica se la pagina è protetta da password
// Restituisce true se il post è protetto da password
// e se la password non corrisponde al cookie
if ( post_password_required( $post ) ) {
    ?>
    <p>
    CONTENUTO PERSONALIZZATO CHE VIENE VISUALIZZATO SOLO QUANDO LA PAGINA È PROTETTA DA PASSWORD
    VA QUI
    </p>
    <?php
} else { 
    // La pagina non è protetta da password
    ?>

<?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(); ?>

MODIFICA

Basandomi su questo commento:

Questo non sembra funzionare, la mia pagina si carica normalmente sia che io sia loggato o meno.

Sospetto che piuttosto che proteggere con password le Pagine, tu voglia che le Pagine siano visibili solo agli utenti loggati? (Nota: questi due concetti sono completamente separati in WordPress.)

Quindi, basandomi su questa ipotesi, vorresti usare is_user_logged_in(), piuttosto che post_password_required().

Ecco un esempio di template personalizzato per Pagine basato su is_user_logged_in():

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

<?php get_header(); ?>

<div id="main">

<?php
// Globalizza $post
global $post;
// Verifica se l'utente è loggato
if ( ! is_user_logged_in() ) {
    ?>
    <p>
    CONTENUTO PERSONALIZZATO CHE VIENE VISUALIZZATO SOLO QUANDO L'UTENTE NON È LOGGATO
    VA QUI
    </p>
    <?php
} else { 
    // L'utente è loggato
    ?>

<?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(); ?>

Per riassumere:

  1. Post/Pagina Protetta da Password

    Applica una password per post/pagina che gli utenti devono inserire per visualizzare il contenuto del post/pagina. Questa password è impostata nella schermata di modifica del post e utilizza l'interfaccia fornita in quella schermata per impostare il post come protetto da password. Il contenuto del post/pagina all'interno del Loop è automaticamente protetto in base a questa impostazione per post.

    Dal Codex:

    Proteggi con Password Questo Post

    Per proteggere un post con password, fai clic su Modifica accanto a Visibilità nell'area Pubblica in alto a destra, quindi fai clic su Protetto da Password, fai clic su Ok e inserisci una password. Quindi fai clic su OK. Nota: gli utenti Editor e Admin possono vedere i post protetti da password o privati nella vista di modifica senza conoscere la password.

  2. Post/Pagina Protetta da Login

    Completamente separato dal proteggere con password un post/pagina. Richiede di racchiudere il contenuto in un condizionale is_user_logged_in() e non utilizza o richiede una password per post.

MODIFICA 2

Guardando il tuo codice, devo chiedere: intendi visualizzare questa mappa su pagine protette da password? Perché è questo che il tuo codice sta indicando:

<?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>

Questo markup sta dicendo: se è richiesta la password del post, visualizza questa mappa javascript.

Immagino che sia l'opposto di quello che vuoi?

Prova invece questo:

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

get_header(); ?>

<?php
global $post;
if ( post_password_required( $post ) ) {
?>
<p>QUESTA PAGINA È PROTETTA DA PASSWORD. INSERISCI LA PASSWORD PER VISUALIZZARE IL CONTENUTO.</p>

<?php 
} else { 
// Nessuna password richiesta, o la password è stata inserita
?>


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

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

window.onload = function() { 

...

}}
) 
</script> 
<div id="map"></div>
1 nov 2011 19:30:42
Commenti

Capisco tutto tranne una parte della tua risposta, cosa significa "e aggiungi il tag Template: file-docblock"?

Rob Rob
2 nov 2011 13:06:32

"cosa significa "e aggiungi il tag Template: file-docblock"?" - Vedi la voce del Codex per creare template di Pagina personalizzati. Modificherò la mia risposta per rendere quel passaggio più chiaro.

Chip Bennett Chip Bennett
2 nov 2011 15:31:19

Ah giusto, semplicemente non sapevo si chiamasse così.

Rob Rob
2 nov 2011 15:42:08

Ho aggiornato la mia risposta in base al tuo commento a @sanchothefat sopra.

Chip Bennett Chip Bennett
2 nov 2011 16:41:09

Grazie, ora ho capito. Provando il tuo primo metodo ottengo questo errore - Parse error: syntax error, unexpected '{' in /home/medicom/public_html/mapping/wp-content/themes/default/page.php on line 16 la linea 16 è if ( post_password_required( $post ) {

Rob Rob
2 nov 2011 16:54:54

Manca la parentesi di chiusura. Cambia questo: if ( post_password_required( $post ) { ...in questo: if ( post_password_required( $post ) ) {

Chip Bennett Chip Bennett
2 nov 2011 16:57:32

Ok, questa è la pagina su cui sto lavorando - http://www.mediwales.com/mapping/members/. Ho provato il primo metodo, ho protetto la pagina con password, ho inserito il contenuto all'interno della parte protetta ma tutto si carica comunque. Non appare alcuna richiesta di password.

Rob Rob
2 nov 2011 17:04:42

Sei sicuro di aver protetto la Pagina con password?

Chip Bennett Chip Bennett
2 nov 2011 17:09:38

E, davvero: possiamo vedere l'intero markup PHP della tua Pagina? A questo punto, la domanda sarà impossibile da diagnosticare/risolvere senza vedere il tuo codice effettivo.

Chip Bennett Chip Bennett
2 nov 2011 17:10:14

Vedi domanda aggiornata

Rob Rob
2 nov 2011 17:13:26

Vedi risposta aggiornata. :)

Chip Bennett Chip Bennett
2 nov 2011 17:30:50

Ok grazie. Ho appena provato. Voglio che la mappa venga mostrata quando viene inserita una password (cioè quella è la parte protetta), dove dovrei inserire una password per vedere il contenuto?

Rob Rob
2 nov 2011 17:41:45

Dovrai aggiungere una chiamata a get_the_password_form(). Vedi EDIT 3 nella risposta aggiornata.

Chip Bennett Chip Bennett
2 nov 2011 17:53:29

Perfetto. C'è un errore di battitura nella chiamata del form (non ho abbastanza privilegi per correggerlo). Spero che una risposta così completa possa aiutare altri, visto che ci sono poche informazioni sull'argomento. Grazie ancora.

Rob Rob
2 nov 2011 17:57:51

"C'è un errore di battitura nella chiamata del form (non ho abbastanza privilegi per correggerlo)" - ops! Ora è sistemato. Grazie per avermelo segnalato.

Chip Bennett Chip Bennett
2 nov 2011 18:01:36
Mostra i restanti 10 commenti
3

Utilizza la seguente funzione all'interno del loop per verificare se l'utente è autorizzato a visualizzare il contenuto personalizzato che vuoi nascondere:

global $post;
if ( ! post_password_required( $post ) ) {
    // contenuto protetto
} else {
    echo get_the_password_form();
}

La protezione tramite password e il form per inserirla vengono visualizzati solo quando vengono chiamati the_content() o the_excerpt(), a meno che non utilizzi l'approccio mostrato sopra.

1 nov 2011 18:38:38
Commenti

Non sembra funzionare, la mia pagina si carica normalmente sia che io sia loggato che no.

Rob Rob
2 nov 2011 13:03:35

Prova come indicato da chip globalizzando prima $post - aggiornerò la mia risposta.

sanchothefat sanchothefat
2 nov 2011 13:14:34

@rob quando dici "loggato o no" intendi loggato nell'admin? Quando inserisci la password per una pagina non importa se sei loggato o no, ricorda solo se hai inserito la password per vedere quella pagina/post. Prova a rimuovere tutti i cookie del sito tra un test e l'altro.

sanchothefat sanchothefat
2 nov 2011 13:19:06
8

Ciao Rob, non posso ancora commentare perché non ho abbastanza privilegi, quindi aggiungerò una risposta invece per fare la mia domanda.

Questa pagina è una pagina normale? Voglio dire, non puoi proteggere con password una pagina se quella pagina è impostata come pagina iniziale o pagina blog in Impostazioni → Lettura.

12 ott 2011 20:49:03
Commenti

Ok, l'ho modificato dalla homepage ma succede la stessa cosa. Quando navigo verso la pagina che è protetta da password, si carica normalmente senza chiedere alcuna password.

Rob Rob
13 ott 2011 11:48:07

Scusami per la domanda, ma sei disconnesso quando provi ad accedere alla pagina, giusto?

chifliiiii chifliiiii
13 ott 2011 15:03:47

Sì, ho provato sia da loggato che da disconnesso, entrambi danno lo stesso risultato.

Rob Rob
13 ott 2011 15:20:37

Mi dispiace ma non posso aiutarti, quello che posso fare è consigliarti un plugin che uso per ottenere ciò che stai cercando di fare. L'unica cosa è che gli utenti devono essere registrati poiché accederanno alla pagina con le loro credenziali di accesso. Il plugin si chiama members e lo puoi trovare su http://wordpress.org/extend/plugins/members/. Spero possa aiutarti!

chifliiiii chifliiiii
13 ott 2011 15:57:15

@chifliiiiii Penso che il mio window.onload = function() { stia sovrascrivendo la password poiché funziona per tutte le altre pagine tranne quella che voglio. Come posso evitare che l'onload bypassi la funzionalità della password?

Rob Rob
31 ott 2011 16:12:22

un link alla pagina aiuterebbe molto, non sono sicuro senza controllare gli script

chifliiiii chifliiiii
31 ott 2011 22:12:42

@chifliiiiii Questa è la pagina su cui sto lavorando - http://www.mediwales.com/mapping/members/

Rob Rob
1 nov 2011 16:52:10

Vedo che è protetta da password Rob

chifliiiii chifliiiii
3 nov 2011 00:57:15
Mostra i restanti 3 commenti
0

Un piccolo aggiornamento. Il nome del template deve essere

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

Hai dimenticato di includere "name"

18 ott 2017 10:29:54