2011-03-06 42 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