首先,PHP不是我的强项,但是我们开始吧。
我的functions.php中有一个函数,可以捕获特色图像并将其设置为背景。然后在header.php中调用此函数
function set_post_background() {
if(query_posts(array ('category_name' => 'results')));
if (have_posts()) : while (have_posts()) : the_post();
global $post;
$bgimage = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "Full");
if (!empty($bgimage)) {
return '<style type="text/css">body {background:#fff url('.$bgimage[0].') no-repeat top center;}</style>';
}
endwhile; endif;
wp_reset_query();
}
昨晚,我试图修改该函数,并将其包装在一个query_posts()
设法使它起作用的类中。现在,如果它属于“结果”类别,它将仅获取帖子的特色图片并将其设置为背景。
但是此代码中的某些内容是错误的,因为现在我的页面内容都没有出现。禁用该功能,内容返回。
我做错了什么?
[编辑]我认为这是我查询类别名称的方式。因为page.php获得了类似的查询,the_content()
我认为该功能覆盖了该查询,因此不显示页面内容。
问题是您正在使用query_posts
它将改变默认主查询的结果。这意味着页面的默认内容将被results
类别中的内容更改。试试这个:
function set_post_background() {
$query = new \WP_Query(['category_name' => 'results']);
if ($query->have_posts()) {
while ($query->have_posts()) : $query->the_post();
$bgimage = wp_get_attachment_image_src(get_post_thumbnail_id($query->post->ID), 'full');
if (!empty($bgimage)) {
return '<style type="text/css">body{background:#fff url('.$bgimage[0].') no-repeat top center}</style>';
}
endwhile;
}
wp_reset_query();
}
在任何情况下,请勿使用query_posts()
功能查询帖子。从参考:
注意:插件或主题不打算使用此功能。如后面所述,有更好的,性能更高的选项可以更改主查询。query_posts()是通过将页面的主查询替换为新的查询实例来简化页面主查询的过于简单和成问题的方式。它效率低下(重新运行SQL查询),并且在某些情况下(特别是在处理帖子分页时,通常会完全失败)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句