在Wordpress中使用循环外部的is_page

时间:2013-10-21 22:52:11

标签: php wordpress

我查看了有关此主题的其他帖子,无法找到我正在寻找的内容。

我想根据我所在的页面调用不同的短代码。

is_page函数在循环中不起作用,所以我不知道如何实现这一点。这是我到目前为止所拥有的。这对我来说具有逻辑意义,但由于某种原因不能奏效。

if ( is_page(545) ) { <?php echo do_shortcode('[scrapeazon asin="Product1"]') ?>}  

elseif ( is_page(525) ) { <?php echo do_shortcode('[scrapeazon asin="Product2"]') ?>}

else ...

if ( is_page(545) ) { <?php echo do_shortcode('[scrapeazon asin="Product1"]') ?>} elseif ( is_page(525) ) { <?php echo do_shortcode('[scrapeazon asin="Product2"]') ?>} else ...

非常感谢任何帮助!

谢谢,

麦克

1 个答案:

答案 0 :(得分:0)

您根据Wordpress Docs正确使用了该功能,但您的PHP已关闭。当php已经打开时,你有<?php开放标记,匹配不需要的结束标记,你丢失了分号。

<?php

if ( is_page(545) ) { echo do_shortcode('[scrapeazon asin="Product1"]'); }
elseif ( is_page(525) ) { echo do_shortcode('[scrapeazon asin="Product2"]'); } 
else ...

?>

对于单行执行,你不需要花括号,但为了突出显示错误,我留下了它们。

虽然

有更简洁的方法
<?php
$pages=array(
    545=>'Product1',
    525=>'Product2',
    567=>'Product3',
    568=>'Product4',
    // etc
    // etc
);
foreach ($pages as $page_id=>$asin){
    if (is_page($page_id)) {
        echo do_shortcode('[scrapeazon asin="'.$asin.'"]');
        break; // because you used elseif you must want to stop checking ids after finding one is a page
    }
} 
?>

虽然它可能更快,而且你的数据库工作更少,但是一次选择所有页面并循环遍历该数组。