检索首页上的缩略图URL时出现问题

时间:2014-09-27 作者:Codette

我正在运行多个查询front-page.php 文件它们似乎都工作得很好,只是我很难获得缩略图。

在我的头版上,当前讨论的代码如下所示:

<?php 

    $thumb_args = array(
    \'posts_per_page\' => 1,
    \'cat\'            => 87
    );

    $thumb_query = new WP_Query( $thumb_args );

    while ($thumb_query->have_posts()) : $thumb_query->the_post(); ?>

    <div id="post-<?php the_ID(); ?>" <?php post_class(\'cat-excerpt right\') ?> itemprop="blogPost">

         <h2 class="headline" itemprop="title">Posted Without Comment</h2>

         <?php include (TEMPLATEPATH . \'/inc/meta.php\' ); ?>

         <a href="<?php the_permalink(); ?>" itemprop="url">
              <img src="<?php get_the_post_thumbnail(\'custom-medium\'); ?>" itemprop="image">
         </a>
    </div><!-- End .post .cat-excerpt -->
    <?php endwhile; 

        wp_reset_postdata(); 
    ?>
我试过两者都用the_post_thumbnail() 自行和get_the_post_thumbnail()<img> 标签当我使用the_post_thumbnail() (带或不带参数)它只返回一个空的锚定标记,该标记链接到正确的帖子。当我使用get_the_post_thumbnail()<img> 标记(无论是否传递参数,如上所示),我都不会返回图像的url。实际帖子的url始终正确。

这是我的functions.php 文件:

if (function_exists( \'add_theme_support\' ) ) {
    add_theme_support( \'automatic-feed-links\' );
    add_theme_support( \'post-formats\', array(\'audio\',\'gallery\', \'image\', \'video\'));
    add_theme_support( \'post-thumbnails\' );
    if (function_exists( \'set_post_thumbnail_size\' ) ) {
        set_post_thumbnail_size( 620, 349, false );
    }
}

if (function_exists( \'add_image_size\' ) ) {
    add_image_size( \'profile\', 100, 100, false );
    add_image_size( \'custom-small\', 300, 169, false );
    add_image_size( \'custom-medium\', 400, 225, false );
    add_image_size( \'custom-full\', 520, 293, false );
}
缩略图在我的single.php 文件,它使用我在上面定义的默认后期缩略图大小。因此,如果有什么问题的话,我想问题在于我添加的图像大小,和/或front-page.php 文件

2 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

不知道你是怎么做到的single.php, 但我相当肯定不是这样的。主要问题是the_post_thumbnail()get_the_post_thumbnail() 正在生成img 为您标记输出-因此将其放入src 的属性img 代码中的tag-like无法工作。

另外:后者可以return, 前者是echo 输出。您使用的是后者,但不要重复它,因此实际上什么都没有发生。还有其他一些区别,例如。the_post_thumbnail() 只能用于当前帖子,因为它没有$post_id 参数get_the_post_thumbnail() 可以用于任何帖子缩略图,只要您输入$post_id. 更多关于codex页面。

因此,在您的案例中的用法如下所示:

// either:
the_post_thumbnail( \'custom-medium\' );
// or:
echo get_the_post_thumbnail( get_the_ID(), \'custom-medium\' );
或者如果你真的想填补src 的属性img 标记您可以执行的操作:

<?php
$img_url = wp_get_attachment_image_src(
    get_post_thumbnail_id( get_the_ID() ),
    \'custom-medium\'
);
?>
<img src="<?php echo $img_url[0]; ?>">
利用wp_get_attachment_image_src(), get_post_thumbnail_id()get_the_ID() - 后者已在上述示例性代码中使用。

<小时>

Update:

只是想澄清一下,上述方法确实经过了多次测试和使用。我想肯定还有另一个问题,但实际上从现有的信息看不出来。

作为概念证明front-page.php 具有custom query:

<?php
get_header();

$paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
$thumb_args = array(
\'posts_per_page\' => 1,
\'cat\'            => 87,
\'paged\'          => $paged
);

$thumb_query = new WP_Query( $thumb_args );

$temp_query = $wp_query;
$wp_query   = NULL;
$wp_query   = $thumb_query;

if (
    $thumb_query->have_posts()
) {
    while (
        $thumb_query->have_posts()
    ) {
        $thumb_query->the_post();
            the_title();
            echo \'<br>\';
            the_post_thumbnail();
            echo \'<br>\';
            echo get_the_post_thumbnail();
            echo \'<br>\';
            $img_url = wp_get_attachment_image_src(
                get_post_thumbnail_id()
            );
            echo \'<img src="\'. $img_url[0]. \'">\';
    }
} else {
    // no posts
}

echo \'<br>\';
previous_posts_link( \'← \' );
next_posts_link( \' →\', $thumb_query->max_num_pages );

wp_reset_postdata();

$wp_query = NULL;
$wp_query = $temp_query;

get_footer();
我还不得不把这个扔进functions.php 要使分页正常工作,请执行以下操作:

add_action(
    \'pre_get_posts\',
    \'wpse162764_frontpage_custom_query_additional_pagination_fix\'
);
function wpse162764_frontpage_custom_query_additional_pagination_fix( $query ) {
    if ( 
        is_admin()
    ) {
        return;
    }
    if (
        is_front_page()
    ) {
        $query->set(
            \'posts_per_page\',
            1
        );
    }
}
如果这对您不起作用,请确保设置了正确的参数,否则肯定会有另一个问题。

此外,几乎不需要自定义查询,所以让我们使用主查询。

A.front-page.php 具有main query:

<?php
get_header();

if (
    have_posts()
) {
    while (
        have_posts()
    ) {
        the_post();
            the_title();
            echo \'<br>\';
            the_post_thumbnail();
            echo \'<br>\';
            echo get_the_post_thumbnail();
            echo \'<br>\';
            $img_url = wp_get_attachment_image_src(
                get_post_thumbnail_id()
            );
            echo \'<img src="\'. $img_url[0]. \'">\';
    }
} else {
    // no posts
}

echo \'<br>\';
previous_posts_link( \'← \' );
next_posts_link( \' →\' );

get_footer();
此外,您需要在functions.php 要使用主查询,请执行以下操作:

add_action(
    \'pre_get_posts\',
    \'wpse162764_pre_get_posts_for_frontpage_main_query\'
);
function wpse162764_pre_get_posts_for_frontpage_main_query( $query ) {
    if ( 
        is_admin()
        || ! $query->is_main_query()
    ) {
        return;
    }
    if (
        is_front_page()
    ) {
        $query->set(
            \'posts_per_page\',
            1
        );
        $query->set(
            \'cat\',
            87
        ); 
    }
}
注:

顺便说一句,我也使用了多个查询/循环来运行它,确实有效,如果做得好,也不会是问题所在。

SO网友:Justin Bell

您的代码似乎理所当然地认为,查询检索到的任何帖子实际上都存在缩略图。我个人建议在尝试检索之前检查特征图像的存在。

<a href="<?php the_permalink(); ?>" itemprop="url">
     <img src="<?php get_the_post_thumbnail(\'custom-medium\'); ?>" itemprop="image">
</a>
方法has_post_thumbnail(), 如果在循环中执行,将告诉您当前帖子是否有缩略图。我会考虑到这一点来调整您的代码,并设想以下内容:

<a href="<?php the_permalink(); ?>" itemprop="url">
    <?php if( has_post_thumbnail() ) : ?>
    <img src="<?php get_the_post_thumbnail(\'custom-medium\'); ?>" itemprop="image">
    <?php else: ?>
    <!-- No Image Available; maybe put something else in its place? -->
    <?php endif; ?>
</a>
这样做,您不仅可以确保仅在适当的时候才渲染图像,还可以确定给定帖子中没有特征图像的事实(通过查看源代码并在我提供的示例中找到HTML注释)。

结束

相关推荐

Images not rendering

我有一个烘焙博客,最近我更改了url。我现在的问题是,当我将图像添加到帖子或图书馆时,它们不会显示/呈现。上载步骤通过OK,但图像不会渲染。你能帮忙吗,我只是不知道我哪里做错了。