2016-02-25 10 views
8

$ _SESSION ayarlıyorum tablosu ve görmezden gelirse de:PHP oturum değişiklikleri beklenmedik [ 'sergi salonu'] Wordpress belirli bir sayfa görüntülendiğinde 'etkin' için yankı komut

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

Sonra 2 diziler set kontrol edilecek sayfaların sayısı. Gösterilen bir sonraki sayfa bu dizilerden birinde DEĞİLDİR, $ _SESSION ['showroom'] 'etkin değil' olarak değişir.

$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'; 
} 

if deyimi çoğu zaman işleri ise ancak diziler biri doğru dönen olsa bazen $ _ SESSION [ 'sergi salonu'] değişiklikler BİLE etkin değil! Birkaç saatlik testten sonra problemin yerini tespit edemiyorum. Burada ne eksik

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';} 

: deyim DAİMA bana 2 doğruları veya 1 gerçek + 1 = false, ama asla 2 FALSEs verirse iki kesimi dışında yankılanıyor?

Yardımlarınız için şimdiden teşekkür ederiz!

DÜZENLEME: test devam etti ve anomali aşağıdaki bulduk: deyim 'pasif' için $ _ SESSION [ 'sergi salonu'] değiştirir ama dışarı echo ETMEZ 'etkin değil olarak ayarlandı' eğer

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

!

Burada garip bir şeyler oluyor!

+0

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

+0

Tüm bu" if..echo "ifadelerini" if "içindeki oturum değişkenini koyarsanız ne görürsünüz? – Barmar

cevap

7

Sorun çözüldü. Kodum iyiydi. İki eksik görüntü dosyası, WordPress'in oturumlarıma çarpmasına neden oluyordu. Bulmak 10 saat sürdü ama mutlu buldum. Herkese yardımları için teşekkürler.

2

Aşağıdakileri deneyebilirsiniz;

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

Düzenleme: Biz not in templates,not in ids, ile sonuç ama hiçbir not in both

+0

Teşekkürler Dave. ! in_array aslen denediğim şeydi ama aynı problemdi. Alternatif olarak == false için başvurdu ama hala şans yok! –

+0

'in_array' bir boole döndürdüğü için'! In_array() 've' in_array() == false' arasında kesinlikle bir fark yoktur. – Barmar

+0

@Barmar - siz haklısınız, bu da Anant'ın yorumuna benzer. – Dave

0

sorun olup sondaki alırsanız o zaman bakın deneyin ve örnekler

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"; 
} 

zorundayım ... daha fazla benzer yıkmak sağlar Saf mantıklı. "Şablon geçerli değil VE sayfası geçerli değilse"

Bu, hem ifadeleri işaretlemek için yerine getirilmesi gereken anlamına gelir için

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

çevirir: bu ifadeye bakalım oturum etkin değil. Şablon iyi ise, ancak sayfa geçerli değilse ne olur? Bu kesinlikle inaktif olarak işaretlenmelidir. "Şablon geçerli değil VEYA sayfası geçerli değilse"okumak deyimi değiştirerek

, geçersiz vakaları örtbas. Çünkü her ikisi de geçersiz bir devlet olarak sayılır ve böylece her şeyin yanlış olması için sadece bir tanesinin yanlış olması gerekir. (OR-ifadesi)

Yani kod-Wise

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

olurdu Ve ayarlanır.

As ve ek olarak. Kodu çalıştığınız şekilde yapılandıracağım. Hangisi daha mantıklı.Diğer bir deyişle, etkin olmayan olarak ele alındığında, bunu aktif değil olarak işaretleyin. Ya da tam tersi.

+0

teşekkürler, ancak BOTH dizilerine karşı kontrol etmem gerekiyor. Şablon VE sayfa kimliği geçersiz olduğunda SADECE oturum devre dışı olur. –

İlgili konular