我正在尝试在WordPress中添加图片发布格式。如果用户没有上传特色图片但是在正文中添加图像,我想从附件中抓取第一张图像并将其显示为顶部标题图像,其余部分显示在文章正文中。这是我想出的功能。如果上传了特色图像,则可以工作,但如果没有,则会抓取一个甚至不在帖子正文中的图像。看起来它没有获得帖子的ID。我做错了什么?请帮忙。这是我的代码:
function justblog_get_attachment(){
if(has_post_thumbnail()) {
the_post_thumbnail('large', array('class' => 'blog-main-image'));
} else {
// No post thumbnail, try attachments instead.
$attachments = get_children(array( 'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'DESC',
'orderby' => 'menu_order ID'));
foreach($attachments as $att_id => $attachment) {
$full_img_url = wp_get_attachment_image_src($attachment->ID, 'full', true);
}
if ($attachments) {
echo '<img src="' . esc_url($full_img_url[0]) . '" alt="Title Image" class="blog-main-image" />';
}
}
wp_reset_postdata();
}
答案 0 :(得分:0)
你需要使用全局填充$ post或将$ post作为参数传递给函数,前者如下所示
function justblog_get_attachment(){
if(has_post_thumbnail()) {
the_post_thumbnail('large', array('class' => 'blog-main-image'));
} else {
// No post thumbnail, try attachments instead.
global $post;
$attachments = get_children(array( 'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'DESC',
'orderby' => 'menu_order ID'));
foreach($attachments as $att_id => $attachment) {
$full_img_url = wp_get_attachment_image_src($attachment->ID, 'full', true);
}
if ($attachments) {
echo '<img src="' . esc_url($full_img_url[0]) . '" alt="Title Image" class="blog-main-image" />';
}
}
wp_reset_postdata();
}
你可以尝试使用css和一点点php。基本上,您修改了标题代码,以便为您的正文或页面周围的div包装器添加一个额外的类。
if ( has_post_thumbnail($post->ID) ){?>
<div class="post-body no-feat-img">
<?php } else { ?>
<div class="post-body">
<?php }
然后使用此类,您可以定位帖子内容中的第一个图像,使img绝对并将其对齐到顶部。
在此处查看示例https://jsfiddle.net/1pveo2wn/1/ - 图片下方有一个按钮可切换课程。这不是理想的,而是一种方法。另一种是在输出之前过滤帖子内容,拉动图像并显示为特色图像。
我不能使用过滤方法的代码的一个原因是,我花了最近两天的时间绕过srcset和wordpress the_post_thumbnail()
来输出适合常见容器大小的不同大小对于每种常见的屏幕类型(移动到宽屏)。因此,我认为你应该放弃这一点,只使用特色图像,如果用户未能选择特色图像,那就很难了。