2016-02-25 11 views
8

Sto installando $ _SESSION [ 'showroom'] a 'attivo' quando viene visualizzata una pagina particolare in Wordpress:cambiamenti di sessione PHP inaspettatamente in if e ignora comando echo

if(get_the_ID()==6470||get_the_ID()==252){ 
    $_SESSION['showroom']='active'; 
} 

Ho quindi impostare 2 array di pagine da controllare. Se la pagina successiva visualizzata NON è in uno di questi array, $ _SESSION ['showroom'] viene modificato in 'inattivo'.

$allowed_templates = array('template-A.php', 
          'template-B.php', 
          'template-C.php', 
          'template-E.php', 
          'template-G.php'); 
$allowed_ids = array(6470,252); 

$template_name = get_page_template_slug(); 
$page_id = get_the_ID(); 

if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){ 
    $_SESSION['showroom']='inactive'; 
} 

L'istruzione if funziona la maggior parte del tempo, ma a volte i miei $ _SESSION [ 'showroom'] modifiche inattivo, anche se uno degli array sta tornando vero! Dopo diverse ore di test non sono in grado di localizzare il problema. Riprendendo le due parti del if mi dà sempre 2 Trues o 1 + 1 vero falso, ma mai 2 falses:

if(in_array($template_name,$allowed_templates)==false){echo 'TFALSE';} 
if(in_array($template_name,$allowed_templates)){echo 'TTRUE';} 
if(in_array($page_id,$allowed_ids)==false){echo 'IFALSE';} 
if(in_array($page_id,$allowed_ids)){echo 'ITRUE';} 

Che cosa mi manca qui?

Grazie in anticipo per qualsiasi aiuto!

EDIT: hanno continuato i test ed è risultata la seguente anomalia:

if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){ 
    $_SESSION['showroom']='inactive'; 
    echo 'SET TO INACTIVE'; 
} 

L'istruzione if cambia $ _SESSION [ 'showroom'] a 'inattivo', ma NON eco out 'impostato su Inattivo'!

C'è qualcosa di strano qui!

+0

'if (in_array ($ template_name, $ allowed_templates) && in_array ($ page_id, $ allowed_ids)) { $ _SESSION ['showroom'] = 'inattivo'; } 'o' if (in_array ($ template_name, $ allowed_templates) === false && in_array ($ page_id, $ allowed_ids) === false) { $ _SESSION ['showroom'] = 'inattivo'; } ' –

+0

Cosa vedi se metti tutte le istruzioni' if..echo' all'interno di 'if' che imposta la variabile di sessione? – Barmar

risposta

7

Problema risolto. Il mio codice andava bene. Due file di immagini mancanti causavano il blocco di WordPress nelle sessioni. Ci sono volute 10 ore per scoprirlo, ma felice l'ho trovato. Grazie a tutti per il loro aiuto.

2

È possibile provare quanto segue;

if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){ 
    $_SESSION['showroom']='inactive'; 
} 

Modifica: permette di cercare di rompere ulteriormente verso il basso ... simili ai tuoi esempi

if(!in_array($template_name,$allowed_templates){ 
    echo "not in templates,"; 
} 
if(!in_array($page_id,$allowed_ids)){ 
    echo "not in ids,"; 
} 
if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){ 
    echo "not in both\n"; 
} 

poi vedere se otteniamo un risultato con not in templates,not in ids, ma senza strascicando not in both

+0

Grazie Dave. ! in_array era quello che provavo in origine, ma lo stesso problema. Ricorso a == falso come alternativa ma ancora senza fortuna! –

+0

Poiché 'in_array' restituisce un valore booleano, non c'è assolutamente alcuna differenza tra'! In_array() 'e' in_array() == false'. – Barmar

+0

@Barmar - sei corretto, e questo è simile al commento di Anant pure. – Dave

0

Il problema è pura logica Vediamo questa dichiarazione:

if (in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false) 

che si traduce in "Se il modello non è valido E pagina non è valido"

Questo significa che entrambe le istruzioni deve essere soddisfatta per marcare sessione come inattiva. Cosa succede se il modello va bene, ma la pagina non è valida? Questo sicuramente dovrebbe essere contrassegnato come inattivo.

Modificando la dichiarazione di leggere "Se il modello non è valido O pagina non è valido", abbiamo coprire i casi non validi. Perché entrambi considerano uno stato non valido e, quindi, solo uno di essi deve essere falso affinché tutto sia falso. (OR-economico)

Così codice-saggio sarebbe

if (in_array($template_name,$allowed_templates)==false || in_array($page_id,$allowed_ids)==false) 

e sei a posto.

Come e aggiunta. Vorrei strutturare il codice come hai notato. Quale è più logico.Vale a dire, contrassegnarlo come inattivo ogni volta che deve essere considerato come inattivo, in tutti gli altri casi contrassegnarlo come 'attivo'. O vice versa.

+0

grazie, ma ho bisogno di verificare contro gli array BOTH. SOLO la sessione diventa inattiva quando il modello AND l'id della pagina non è valido. –