【问题标题】:Syntax issue with foreach loop for wordpress function [closed]wordpress 函数的 foreach 循环的语法问题[关闭]
【发布时间】:2012-01-23 22:58:04
【问题描述】:

更新

我的小部件设置为输出 div,而不是 li 元素,因此 $widgets_array 没有用。 我通过将<li 部分更改为<div 解决了这个问题

谢谢你的回答


我有一个以随机顺序显示用户指定数量的小部件的功能。变量$widgetnumber 应该控制要显示的小部件的数量,但它不起作用。不管输入什么数字,都会显示所有的小部件,如果输入0,则不显示小部件,所以有些逻辑是起作用的。

我希望默认显示 1 个小部件。

我已经回显了变量并且它们被正确填充。有没有人看到任何可能导致它无法按上述方式运行的东西?

谢谢!

功能齐全:

// Sidebar widget limit
function limit_widgets($sidebar){
    ob_start();
    $widgets = dynamic_sidebar($sidebar);
    if($widgets){
        $html = ob_get_contents();
        $widgets_array = explode("<li",$html);
        $widgets_end = count($widgets_array);
        $body = array_slice($widgets_array, 0, $widgets_end+1); 
        shuffle($body);
        global $wp_query;
        $postid = $wp_query->post->ID;
        $widgetnumber = intval(get_post_meta($postid, 'widget_number', true));

        var_dump($widgetnumber);
        var_dump($body);

        for ($i = 0; isset($body[$i]) && $i < $widgetnumber; $i++) {
            $final_html .= $i.' '.$body[$i];
        }
    }
    else{
        $final_html = "";
    }
    ob_end_clean();
    echo $final_html;
}

HTML 输出为:

0
    <div class="ad-feature">
        <a class="widget_sp_image-image-link" target="_blank" href="http://www.toysrus.com/shop/index.jsp?categoryId=2255956" target=""><img alt='' src="https://.../wordpress/wp-content/uploads/2012/01/ad.jpg" style="" /></a>
    </div>

    <div class="ad-feature">
        <a class="widget_sp_image-image-link" target="_blank" href="http://jcp.is/JCPMerchTab" target=""><img alt='JCPenny' src="http://.../wordpress/wp-content/uploads/2012/01/Tshirtad2.png" style="" /></a>
    </div> 

此外,放置var_dump($widget);var_dumb($body) 不会输出任何内容。

【问题讨论】:

  • 在 foreach 之前var_dump($widgetnumber); 会得到什么?
  • 感谢您的建议 Alien...var_dump($widgetnumber); 不输出任何内容...但是 foreach 中的 echo $widgetnumber; 输出正确的数字
  • if($widget &amp;&amp; $widgetnumber != 0){ 尝试将!=0 更改为!==0
  • 感谢 Paul,但这并没有改变任何事情。

标签: php wordpress function foreach


【解决方案1】:

尝试用这个替换你的foreach,看看它是否符合你的要求:

for ($i = 0; isset($body[$i]) && $i < $widgetnumber; $i++) {
    $final_html .= $i.' '.$body[$i];
}

【讨论】:

  • 戴夫感谢您的回答......它仍然输出两个小部件以及“0”
  • 请您编辑问题,并使用它产生的确切输出,以及如果您在循环之前立即使用var_dump($body)var_dump($widgetnumber) 会得到什么
  • 我想通了...我的小部件使用的是&lt;div&gt;s,而不是&lt;li&gt;s,因此没有被拆分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多