我正在为我朋友的公司开发Wordpress主题,但这个问题都是关于PHP所以写在这里,在SO上。
我有两个侧边栏,就是我们在Wordpress中显示侧边栏的方式:
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('SidebarName') ) :
endif;
所以这是一个if语句。
好的,现在,我想要显示一个侧边栏IF $ layout =“one”TWO sidebars IF $ layout ==“two”等。
此代码有效,但它重复了侧边栏内容我认为endifs正在弄乱父循环或类似的东西:
if($layout="one") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 1') ) :
endif;
} elseif($layout=="two") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(' Sidebar 1') ) :
endif;
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 2') ) :
endif;
} elseif($layout=="three") { (...)
如何解决这个问题?当我只删除主if循环时 - 一切都像预期的那样工作,所以我确定我在上面某处丢失了。
抱歉,错别字,我正在使用$ layout ==而不是=
答案 0 :(得分:1)
编辑:我刚做了一个测试,看起来这个答案是错误的。我能够将结果和大括号混合使用if和while语法。但是,手册确实说明了:
'注意:混合语法相同 不支持控制块。'
所以我对此感到有点困惑。
PHP If语句有两种类型的语法,一种带括号,另一种带冒号。
if () {
}
和
if ():
endif;
对于while,for,foreach等也有类似的语法。但是不允许将大括号与冒号语法混合使用。因此,您需要将代码更改为
if($layout=="one") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 1') ) {
}
} elseif($layout=="two") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(' Sidebar 1') ) {
}
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 2') ) {
}
} elseif($layout=="three") { (...)
或
if($layout=="one"):
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 1') ) :
endif;
elseif($layout=="two"):
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(' Sidebar 1') ) :
endif;
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 2') ) :
endif;
elseif($layout=="three"):
(...)
endif;
您可以在http://php.net/manual/en/control-structures.alternative-syntax.php
了解更多相关信息编辑:我多么愚蠢,我没注意到这一点。像其他答案一样,你使用了一个等号而不是两个来测试相等。
答案 1 :(得分:1)
没有“if
循环”这样的东西。 :)
由于您基本上只是一次又一次地重复相同的条件,您可以在逻辑上将其重组为:
if (function_exists('dynamic_sidebar')) {
switch ($layout) {
case 'one' :
dynamic_sidebar('Sidebar 1');
break;
case 'two' :
dynamic_sidebar('Sidebar 1');
dynamic_sidebar('Sidebar 2');
break;
case ...
}
}
这也应该处理导致脚本行为异常的语法/拼写错误。
答案 2 :(得分:0)
看起来你的意思是使用等号运算符==
,你正在使用赋值运算符=
if ($layout == "one")
// etc
顺便提一下,还要考虑使用更常见的if/else
PHP语法。而不是使用elseif
和endif
使用此语法。根据您的惯例和偏好支持。
if (condition)
{
// code for condition
}
else if (condition)
{
// code
}
else
{
// else case code
}
答案 3 :(得分:0)
我同意Michael的观点,而且我不确定你的功能是如何设置的,但通常我会看到更类似于
的内容if($layout == "one" && function_exists('dynamic_sidebar'))
{
dynamic_sidebar('Sidebar 1');
}
答案 4 :(得分:0)
首先,这是错误的:
if ($layout="one")
始终在==
语句中使用===
或if
(elseif
相同),因为=
实际上会分配该值。这可能是造成你的错误的一部分。
更好的是,在这种特殊情况下,请使用switch
statement
第三,您不必继续复制!function_exists('dynamic_sidebar')
只需将其复制一次即可。它应该是这样的:
if function_exists('dynamic_sidebar')
{
switch ($layout)
{
case 'one':
dynamic_sidebar('Sidebar 1');
break;
case 'two':
dynamic_sidebar('Sidebar 1');
dynamic_sidebar('Sidebar 2');
break;
// ...
}
}
更好的是,将整个事物更改为数字,然后执行for循环:
if function_exists('dynamic_sidebar')
{
for ($i = 0; $i < $sidebarCount; ++$i)
{
dynamic_sidebar("Sidebar $i");
}
}