2011-03-06 45 views
2

在WordPress的header.php文件獲取當前頁面名稱,有沒有辦法減少這種方式:在WordPress

<?php if (is_page('about')): ?> 
<script type="text/javascript">var page = "about";</script> 
<?php endif ?> 

<?php if (is_page('contact')): ?> 
<script type="text/javascript">var page = "contact";</script> 
<?php endif ?> 

<?php if (is_page('gallery')): ?> 
<script type="text/javascript">var page = "gallery";</script> 
<?php endif ?> 

<script type="text/javascript"> 
var page = "<?php echo get_current_page() ?>"; 
</script> 
+0

@ n00b32:你能解釋一下這句話?我沒有看到他不能或不應該這樣做的任何理由。 – 2011-03-06 12:23:24

+0

@ n00b32:我相信你至少可以試着總結一下你的立場。只是說「你不應該這樣做」就意味着什麼。特別是在像SO這樣的論壇上,而且對於自己聲譽有限的用戶更是如此。如有需要,請發表答覆,詳細說明反對意見以及建議的替代解決方案。 – 2011-03-06 12:58:59

+0

你也沒有太多的名聲,以及我不花很多時間在這裏我試圖幫助,當我下降要求的東西。爲什麼不這樣做?首先我看到一個可能的xss(很不確定,但仍然),我不喜歡'<?php endif;通常你應該處理那個IN js不給js一個變量......這是一個簡短的總結,爲什麼我認爲它的壞 – n00b 2011-03-06 13:19:41

回答

5

OK,這裏的輕微擦的是,is_page()如果包含的字符串是帖子標題或帖子團(WordPress Codex),函數將返回TRUE。所以我會提供兩種解決方案,您可以選擇哪一種最適合您。

<script type="text/javascript"> 
<?php $pageDetails = get_page(); ?> 
var page_title = "<?php echo str_replace('"' , '\"' , $pageDetails->post_title); ?>"; 
var page_slug = "<?php echo str_replace('"' , '\"' , $pageDetails->post_name ); ?>"; 
</script> 

我包括str_replace()位,以確保包括引號的任何頁面名稱不會打破你的Javascript。

而且,調整爲每大衛·M註釋,使用JSON使事情更安全一點...

<script type="text/javascript"> 
<?php $pageDetails = get_page(); ?> 
var page_title = <?php echo json_encode($pageDetails->post_title); ?>; 
var page_slug = <?php echo json_encode($pageDetails->post_name ); ?>; 
</script> 
+0

用戶將標題設置爲''bla bla \''並命名爲'';警報(/ XSS /);'? kaboom ... – n00b 2011-03-06 13:22:45

+0

啊...謝謝。所以is_page()進行搜索。 – 2011-03-06 13:25:50

+0

@ n00b32:這裏是這種情況嗎?由於這些值是從Wordpress內部生成的(與僅來自GET變量相比),我會懷疑這種XSS問題會不太可能影響這個特定的實例。 – 2011-03-06 13:52:45