Php 循环中的函数 函数mm_posts(){ $result=''; 如果(have_posts()): 查询帖子('cat=5,每页帖子=4'); while(have_posts()):the_post(); $post_thumbnail_id=get_post_thumbnail_id(); $post_thumbnail_url=wp_get_attachment_image_src($post_thumbnail_id,数组(300200)); 函数mega_thmb(){ 如果(已发布缩略图()): $img=''; 其他: $img=''; endif; 返回$img; } $result.=' ' . mega_thmb()。 “运动 Lorem ipsum dolor sit amet '; 结束时; wp_reset_query(); endif; 返回$result; }

Php 循环中的函数 函数mm_posts(){ $result=''; 如果(have_posts()): 查询帖子('cat=5,每页帖子=4'); while(have_posts()):the_post(); $post_thumbnail_id=get_post_thumbnail_id(); $post_thumbnail_url=wp_get_attachment_image_src($post_thumbnail_id,数组(300200)); 函数mega_thmb(){ 如果(已发布缩略图()): $img=''; 其他: $img=''; endif; 返回$img; } $result.=' ' . mega_thmb()。 “运动 Lorem ipsum dolor sit amet '; 结束时; wp_reset_query(); endif; 返回$result; },php,wordpress,Php,Wordpress,Php显示错误:致命错误:无法重新声明mega_thmb()(以前在 我应该怎么做?如何在循环内编写函数?。按如下方式构造代码。此外,每次运行循环时,您都会再次声明函数,即使它已经在内存中。它需要在循环外。最佳做法是根本不嵌入函数 function mm_posts() { $result = ''; if ( have_posts() ) : query_posts('cat=5&posts_per_page=4'); while ( have_p

Php显示错误:致命错误:无法重新声明mega_thmb()(以前在


我应该怎么做?如何在循环内编写函数?

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

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;
}
函数mega_thmb(){
如果(已发布缩略图()):
$img='';
其他:
$img='';
endif;
返回$img;
}   
功能mm_posts(){
$result='';
如果(have_posts()):
查询帖子('cat=5,每页帖子=4');
while(have_posts()):the_post();
$post_thumbnail_id=get_post_thumbnail_id();
$post_thumbnail_url=wp_get_attachment_image_src($post_thumbnail_id,数组(300200));
$result.='
' .
mega_thmb()。
“运动
Lorem ipsum dolor sit amet
';
结束时;
wp_reset_query();
endif;
返回$result;
}

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

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

您之所以尝试这样做,是因为您认为它将允许您访问变量$post_thumbnail_url,但PHP也不是这样工作的-函数只能将传递给它的变量视为参数,或者使用
global
关键字从全局范围包含。其他任何变量都是局部变量,其值将以
开头>空

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

  • 定义一个普通函数mega_thumb(你对该函数有什么看法?),该函数作为参数传递$post_thumb_url
  • 将当前已损坏的mega_thmb中的代码直接放到mm_帖子中,因为您只在一个地方使用它,而且它只有几行长

PHP没有嵌套函数的概念。将mega_thmb的定义放在mm_posts的定义中,你想实现什么?@IMSoP,mega_thmb()必须在循环中使用。因为,如果我在循环外使用mega_thmb,它不会返回$post_ThumbU url[0]。PHP不是这样工作的(您可能经常使用JS及其嵌套作用域)。函数只是一个全局函数,无论它在何处定义,并且只能访问传递给它的变量。@IMSoP,感谢您的帮助,我解决了我的问题!:)在循环之外和mm_posts()之外使用函数函数如果我在循环外定义此函数,我的代码将不起作用,因为用mega_thmb()函数编写的变量“$post_thumbU url[0]”必须在循环内使用。在函数外声明该变量。或者至少在循环外嵌入函数,这是您的主要问题。
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;
}