循环内的函数

时间:2014-06-22 15:19:18

标签: php wordpress

function mm_posts() {
  $result = '';      

  if ( have_posts() ) :
    query_posts('cat=5&posts_per_page=4');
    while ( have_posts() ) : the_post();

    $post_thumbnail_id = get_post_thumbnail_id();
    $post_thumbnail_url = wp_get_attachment_image_src( $post_thumbnail_id, array(300, 200) );

    function mega_thmb() {
      if ( has_post_thumbnail() ) : 
        $img = '<img src="' .  $post_thumbnail_url[0] . '" alt="" class="img-responsive">';
      else :
        $img = '<img src="' .  get_template_directory_uri() . '/img/no-image.gif" alt="" class="img-responsive">';
      endif;

      return $img;
    }

      $result .= '
        <div class="col-md-3">' .
          mega_thmb() .
          '<div>Sport</div>
          <div>Lorem ipsum dolor sit amet</div>
        </div>';
    endwhile;
    wp_reset_query();
  endif;
  return $result;
}

Php显示错误:致命错误:无法重新声明mega_thmb()(之前已声明...

我该怎么办?如何在循环内写入函数?

2 个答案:

答案 0 :(得分:1)

。按如下方式构建代码。此外,每次循环运行时,您都会再次声明该功能,即使它已经在内存中。它需要在循环之外。最佳做法是不要将功能嵌入

function mega_thmb() {
      if ( has_post_thumbnail() ) : 
        $img = '<img src="' .  $post_thumbnail_url[0] . '" alt="" class="img-responsive">';
      else :
        $img = '<img src="' .  get_template_directory_uri() . '/img/no-image.gif" alt="" class="img-responsive">';
      endif;

      return $img;
    }   

function mm_posts() {
  $result = '';      

  if ( have_posts() ) :
    query_posts('cat=5&posts_per_page=4');
    while ( have_posts() ) : the_post();

    $post_thumbnail_id = get_post_thumbnail_id();
    $post_thumbnail_url = wp_get_attachment_image_src( $post_thumbnail_id, array(300, 200) );



      $result .= '
        <div class="col-md-3">' .
          mega_thmb() .
          '<div>Sport</div>
          <div>Lorem ipsum dolor sit amet</div>
        </div>';
    endwhile;
    wp_reset_query();
  endif;
  return $result;
}

我建议阅读PHP文档,并在继续之前咨询一些教程。可能还需要对代码进行一些其他更改才能使其完全正确,但请不要在其他函数内部定义函数,尤其是在循环内部。阅读手册。

答案 1 :(得分:1)

每次运行mm_posts函数时,都会定义一个名为mega_thmb的函数。但是在PHP中,只能有一个具有特定名称的函数(除了不同类中的方法),因此这会导致您看到的错误。

您正在尝试这样做,因为您认为它可以让您访问变量$ post_thumbnail_url,但这不是PHP的工作方式 - 函数只能看到作为参数传递给它的变量,或者包含在全局范围内的变量global关键字。其他任何东西都是一个局部变量,其值将从null开始。

我可以看到两种解决方案:

  • 定义一个正常的函数mega_thumb(你有什么反对那个?),它将$ post_thumbnail_url作为参数传递。
  • 将当前处于损坏的mega_thmb中的代码直接放入mm_posts,因为您只在一个地方使用它,而且它只有几行。