Wordpress - 如何将特定类别的特色图像显示为背景?

时间:2016-05-16 07:56:41

标签: php wordpress

首先,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()我设法使其正常工作。它现在只会获取帖子的精选图像,如果它位于名为“结果”的类别中,则将其设置为背景。

但是这段代码中的某些内容是错误的,因为现在我的页面内容都没有出现。禁用该功能,内容回来。

我做错了什么?

[edit]我认为这是我查询类别名称的方式。因为page.php类似的查询得到the_content()我认为该函数覆盖了该查询,因而没有显示页面内容。

2 个答案:

答案 0 :(得分:1)

问题是你正在使用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查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。

答案 1 :(得分:0)

请为您的代码替换以下代码,它应该可以正常工作。

function set_post_background() {
$cat_ids=array();
$img='';
$cat_ids=wp_get_post_categories();

foreach($cat_ids as $cat_id){
    $img=wpds_tax_pic_url($cat_id);
}
if (!empty($img)) {
  return '<style type="text/css">body {background:#fff url('.$img.') no-repeat top center;}</style>';
}}

您还可以在&#34; else&#34;上设置默认图像。声明

试试吧!...