以下功能查找Wordpress精选图片,如果帖子没有,则会搜索第一个附件图片并使用该图片。
它在页面上的PHP中完美执行,但是当我尝试将它用作可以被调用的函数时,ELSE部分内的第二部分不能用于某些帖子。
我已经使用SQL查询进行了检查,没有理由说它不起作用。
function title_image($size,$post_id,$class){
if(has_post_thumbnail($post_id)){
$return = get_the_post_thumbnail($post_id,$size,array('class' => $class));
}
else {
//Section not working on all posts //
$imgs = get_posts(array('post_type' => 'attachment', 'numberposts' => 1, 'post_parent' => $post_id));
foreach($imgs as $img){
$return = '<img src="'.$img->guid.'" class="'.$class.'" />';
}
}
return $return;
}
在这样的页面上调用:
echo title_image('full',get_the_ID(),'featuredimg');
为什么放在页面上时会起作用,但在作为函数调用时却不起作用
答案 0 :(得分:1)
在get_posts
args中,设置帖子状态和 mime类型:
'post_status' => 'inherit',
'post_mime_type' => 'image'
此外,您不应使用guid
,请使用wp_get_attachment_image_src()
获取附件src:
foreach( $imgs as $img ){
$thumb = wp_get_attachment_image_src( $img->ID, $size, false );
$return = '<img src="' . $thumb[0] . '" class="' . $class . '" />';
}
我建议使用get_children
来检索附件,而不是get_posts
:
答案 1 :(得分:0)
仍然没有解释原因,但问题在于has_post_thumbnail()函数。
对于某些帖子而言,这是正确的,因为我们无法解释,因为他们没有精选图片。
修改代码以解决此问题:
function title_image($size,$postid,$class){
$return = get_the_post_thumbnail($postid,$size,array('class' => $class));
if(!$return) {
$imgs = get_children(array('post_type' => 'attachment', 'numberposts' => 1, 'post_parent' => $postid));
foreach($imgs as $img){
$return = '<img src="'.$img->guid.'" class="'.$class.'" />';
}
}
return $return;
}