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()(之前已声明...
我该怎么办?如何在循环内写入函数?
答案 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
开始。
我可以看到两种解决方案: