WordPress获取帖子缩略图URL

时间:2015-06-24 作者:Marian Rick

这很简单,而且经常得到回答:我想获得post-thumbnail变量。即使有很多投入,我也无法让它为我工作。

这是我当前使用的代码front_page.php 模板:

<?php
 $args = array( \'numberposts\' => \'2\' );
 $recent_posts = wp_get_recent_posts( $args );
 foreach( $recent_posts as $recent ){
      echo \'<div class="post">\';
      echo \'<div class="post_thumb" style="background-image:url(\'.get_the_post_thumbnail( $recent[\'ID\'], \'thumbnail\').\')"></div>\';
      echo \'<div class="content"\';
      echo \'<h2 class="post_title">\';
      echo \'<a href="\'.get_permalink($recent["ID"]).\'" title="\'.$recent["post_title"].\'" >\'.$recent["post_title"].\'</a>\';
      echo \'</h2>\';
      echo \'<p class="post_excerpt">\'.$recent["post_excerpt"].\'</p>\';
      echo \'</div>\'; //content
      echo \'</div>\'; //.post
}
?>
除了get_the_post_thumbnail() 部分

我知道,我可以使用

$post_thumbnail_id = get_post_thumbnail_id($post->ID);
$post_thumbnail_url = wp_get_attachment_url( $post_thumbnail_id );
但我无法在自己的内部实现此代码。我试着把它加进去foreach 虽然之前,但两者似乎都不起作用。我没有收到任何可以查找的错误,它只输出“nothing”,这意味着没有style="background-image: url()";.

如果有人不仅可以显示,而且可以解释,为什么我的代码不起作用,我会很高兴。我想,如果我已经解决了这个问题,我的下一个问题将是*我必须在哪里添加\'thumbnail\' 为了输出正确的图像大小?

Broken code

<?php
    $args = array( \'numberposts\' => \'2\' );
    $recent_posts = wp_get_recent_posts( $args );
    foreach( $recent_posts as $recent ){
        $post_thumbnail_id = get_post_thumbnail_id($post->ID);
        $post_thumbnail_url = wp_get_attachment_url( $post_thumbnail_id );
        echo \'<div class="post">\';
        echo \'<div class="post_thumb" style="background-image:url(\'.$post_thumbnail_url.\')"></div>\';
        echo \'<div class="content"\';
        echo \'<h2 class="post_title">\';
        echo \'<a href="\'.get_permalink($recent["ID"]).\'" title="\'.$recent["post_title"].\'" >\'.$recent["post_title"].\'</a>\';
        echo \'</h2>\';
        echo \'<p class="post_excerpt">\'.$recent["post_excerpt"].\'</p>\';
        echo \'</div>\'; //content
        echo \'</div>\'; //.post
    }
?>

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

起初,我看到双引号和单引号都混在一起了。这确实修复了我看到的一些问题,但我终于有时间测试您编写的代码。

第一步,我用var_dump 在…上$recent_posts 以确保获得可用值。

接下来,我重复调用每个变量,以确保我知道生成了什么。我发现,正如詹姆斯·巴雷特(JamesBarrett)所说,这句话并没有调用正确的信息:

$post_thumbnail_id = get_post_thumbnail_id($post->ID);
因此,我使用了@james barrett的建议,并将其改为:

$post_thumbnail_id = get_post_thumbnail_id($recent["ID"]);
这样就可以得到正确的ID。

在我拨打正确的信息后url() 部分填充正确,但下一个问题是调用正确的大小。

我做了一些研究,发现了文件是如何保存在“上传”文件夹中的,然后继续搜索一种访问功能的方法,该功能允许我访问标记为“缩略图”的功能。我发现的解决方案可能不适用于其他尺寸,或者你可以在这之后做更多的研究,但我改变了$post_thumbnail_url 变量为:

$post_thumbnail_url = wp_get_attachment_thumb_url( $post_thumbnail_id );
这导致150x150映像被调用。

说到底,我把你的broken code 上述工作代码:

<?php 
$args = array( \'numberposts\' => \'2\' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
        $post_thumbnail_id = get_post_thumbnail_id($recent["ID"]);
        $post_thumbnail_url = wp_get_attachment_thumb_url( $post_thumbnail_id );
        echo \'<div class="post">\';
        echo \'<div class="post_thumb" style="background-image:url(\\\'\'.$post_thumbnail_url.\'\\\')"></div>\';
        echo \'<div class="content"\';
        echo \'<h2 class="post_title">\';
        echo \'<a href="\'.get_permalink($recent["ID"]).\'" title="\'.$recent["post_title"].\'" >\'.$recent["post_title"].\'</a>\';
        echo \'</h2>\';
        echo \'<p class="post_excerpt">\'.$recent["post_excerpt"].\'</p>\';
        echo \'</div>\'; //content
        echo \'</div>\'; //.post
        }
?>
注意:我将url()调整为url(“”),因为我的一些旧浏览器需要单引号,但我怀疑您可以删除它们。

SO网友:James Barrett

我认为问题在于以下代码行:

$post_thumbnail_id = get_post_thumbnail_id($post->ID);
应该是你的身份证$recent 变量not$post.

$post_thumbnail_id = get_post_thumbnail_id($recent->ID);

$post_thumbnail_id = get_post_thumbnail_id($recent[\'ID\']);
要获得特定大小的缩略图,可以执行以下操作:

<?php
  foreach( $recent_posts as $recent ){
    $post_thumbnail_id = get_post_thumbnail_id($recent[\'ID\']);
    $post_thumbnail_url = wp_get_attachment_image_src($post_thumbnail_id, \'thumbnail\' );

    echo \'<div class="post">\';
    echo \'<div class="post_thumb" style="background-image:url(\'.$post_thumbnail_url.\')"></div>\';
    echo \'<div class="content"\';
    echo \'<h2 class="post_title">\';
    echo \'<a href="\'.get_permalink($recent["ID"]).\'" title="\'.$recent["post_title"].\'" >\'.$recent["post_title"].\'</a>\';
    echo \'</h2>\';
    echo \'<p class="post_excerpt">\'.$recent["post_excerpt"].\'</p>\';
    echo \'</div>\'; //content
    echo \'</div>\'; //.post

  }
?>

结束

相关推荐

Limit loop to future events

我有一个自定义的帖子类型,basic_events, 带有自定义日期字段,date_of_event. 我的视图根据此自定义日期字段按升序显示这些帖子。$args = array( \'post_type\' => array(\'basic_events\'), \'order\' => \'ASC\', \'orderby\' => \'meta_value_num\', \'meta_key\'