这需要在主题的搜索结果模板中处理。如果主题是现成的,则可能不支持附件的缩略图,因为—正如您所经历的—附件通常不会出现在搜索结果中。
这是因为在普通主题中,每个结果都将使用the_post_thumbnail()
函数显示缩略图。在引擎盖下,特色图片本身是一个附件类型的帖子。此函数用于获取帖子特色图像的ID,并在中使用该IDwp_get_attachment_image()
, 输出附件的图像/缩略图。
由于附件帖子没有特色图片,因为它们本身就是附件,所以此功能不会显示任何内容。
因此,要显示附件帖子的图像,模板需要检查帖子是否是附件,如果是,则跳过the_post_thumbnail()
并直接转到wp_get_attachment_image()
使用帖子自己的ID。您可以从this example 这就是附件模板显示图像的方式。
实际上,这类似于:
if ( get_post_type() === \'attachment\' ) {
echo wp_get_attachment_image( get_the_ID(), \'large\' );
} else {
the_post_thumbnail( \'large\' );
}
确切的
image size 用以代替
\'large\'
取决于主题已使用的内容。
这将涉及修改主题文件,确切的文件取决于原始主题。您需要根据Template Hierarchy 查看实际使用的文件。无论是哪个文件,都应该通过创建Child Theme. 这将确保更改不会受到主题更新的影响,而主题更新通常会删除任何更改。
另一种不涉及修改模板(但仍需要创建子主题或自定义插件来放入代码)的方法是过滤帖子缩略图ID的请求。
在内心深处the_post_thumbnail()
使用get_post_meta( $post->ID, \'_thumbnail_id\', true );
获取作为帖子特色图片的附件ID。您可以对此进行筛选,以便如果WordPress为帖子请求该元数据,而帖子是附件,则返回附件的ID。
您可以使用get_post_metadata
过滤器:
function wpse_300128_attachment_post_thumbnail( $value, $post_id, $meta_key, $single ) {
if ( get_post_type( $post_id ) === \'attachment\' && $meta_key === \'_thumbnail_id\' ) {
return $single ? $post_id : array( $post_id );
}
}
add_filter( \'get_post_metadata\', \'wpse_300128_attachment_post_thumbnail\', 10, 4 );
当该过滤器处于活动状态时,WordPress在任何时候尝试获取附件帖子的缩略图ID时,都会收到该ID。返回值可以是ID,也可以是基于
$single
. 这样,无论原始调用是否
$single
设置为true或false。