在博客索引上获取特色图片

时间:2012-09-09 作者:demogar

我一直在尝试使用主页上的“特色图片”(博客索引),但运气不好。它适用于每个页面,但不适用于主页。

代码如下所示:

// Don\'t use on single posts
    if (!is_single()) {
        if (is_home()) {
            if (function_exists(\'wp_get_attachment_thumb_url\')) {
                $img = wp_get_attachment_image_src(get_post_thumbnail_id(),\'full\');
                $featured_image = $img[0];
            }
        } else {
            if (function_exists(\'wp_get_attachment_thumb_url\') && has_post_thumbnail()) {
                $img = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),\'full\');
                $featured_image = $img[0];
            }
        }
        if ($featured_image) { ?>
            // A lot of code...
        <?php }
    }
我已经尝试使用_thumbnail_id 元。相同的结果。

这段代码放在函数文件中,我认为问题在于它试图获得循环/帖子的特色图像。

提前非常感谢。

5 个回复
最合适的回答,由SO网友:Michael 整理而成

如果您指的是“帖子页面”,请尝试(仅显示代码的相关部分):

if (is_home() && get_option(\'page_for_posts\') ) {
    $img = wp_get_attachment_image_src(get_post_thumbnail_id(get_option(\'page_for_posts\')),\'full\'); 
    $featured_image = $img[0];
} else { 

SO网友:Kevin Leary

我建议任何这样做的人考虑以下调整:

  1. 使用get_queried_object(). 对于设置为页面的博客索引,这将返回正确的页面ID。如果您只想使用全尺寸图像wp_get_attachment_url() 而不是wp_get_attachment_image_src()
这里有一个快速函数,我可以用一种更简单的方式来实现这一点:

/**
 * Custom Featured Image
 */
function custom_featured_image() {
    $queried_obj = get_queried_object();

    // Don\'t use on single posts (JUST FOR THIS DEMO)
    if ( is_single() ) return;

    // Get the featured image ID
    $image_id = get_post_thumbnail_id( $queried_obj->ID );

    // Get the URL for the full sized image
    $image_src = wp_get_attachment_url( $image_id );

    return $image_src;
}
我个人喜欢避免过多的嵌套条件逻辑,使用函数可以帮助做到这一点。

SO网友:troychroi

这很有效。。

<section id="banner" style="background-image: <?php if (is_home() && get_option(\'page_for_posts\') ) {
    $blog_home_id = get_option( \'page_for_posts\' );
    echo \'url(\'.get_the_post_thumbnail_url($blog_home_id, \'full\').\')\'; 
} else { 
echo \'url(\'.get_the_post_thumbnail_url($post->ID, \'full\').\')\';
}
?>;">

希望这有帮助!

SO网友:Wyck

您有两个快速选项,通过模板文件使用the_post_thumbnail 对于循环。我假设您以典型的博客格式输出数据,因此您上面的函数在循环中不会工作或行为非常奇怪。

相反,在主循环所在的实际模板文件中尝试类似的操作(可能是index.php或loop.php):

  //loop starts
   if ( has_post_thumbnail() ) { 
   the_post_thumbnail();
   }
   //the_content(); and other stuff
   //loop ends
或者,如果您想使用操作来更改主循环,则可以使用pre_get_posts, 例如,在函数中。php文件。

类似于:

add_action( \'pre_get_posts\', \'add_featured_image\' );

function add_featured_image( $query ) {

    if( $query->is_main_query() && $query->is_home() ) {
        //your image code
    }

}
请注意,上面检查的是两个参数,即主查询和主页,检查它是否是主查询非常重要,否则将更改所有查询。

参考号:http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

SO网友:Tiago Couto

当您处于“posts页面”时,$post将从循环中的第一个“post”开始。一种方法是使用“查询对象”。

打印$wp\\u query,您将看到:[queryed\\u object][posts][post]--注意:queryed\\u object在某些页面中将/可能为空

// get_the_post_thumbnail_url( get_queried_object(), \'fullsize\' );

// or

function ABC_get_the_thumbnail_url() {

    $queried_object = get_queried_object();

    $thumbnail_url = get_the_post_thumbnail_url( $queried_object, \'fullsize\' );

    if ( ! $thumbnail_url ) {

        return get_template_directory_uri() . \'/your-path/default-image.jpg\';

        // or from a default option

    }

    return $thumbnail_url;

}

结束

相关推荐