Get_the_post_thbillail()-在第64行的/wp-includes/post-thhumbail-template.php中为Foreach()提供的参数无效

时间:2014-06-27 作者:kanenas

在过去的几个小时里,我一直在努力找出这个问题的症结所在。。。

<?php $related_posts = get_field(\'related_posts\'); ?>
<?php if ($related_posts) : ?>
    <div class="related-projects_items-list-container">
        <div class="comments-area-title">
            <h4 class="hN"><?php _e(\'<em>Related</em> Articles\', wpgrade::textdomain()); ?></h4>
        </div>
        <ul class="related-projects_items-list grid">
        <?php
        foreach ($related_posts as $post_object) {
            $the_post_ID = $post_object->ID;
            $the_permalink = get_permalink( $post_object->ID );
            $the_title = get_the_title( $post_object->ID );
            $the_thumbnail = get_the_post_thumbnail( $post_object->ID, array(200,150) );
            $the_post_author = $post_object->post_author;
            ?>
            <li class="related-projects_item grid__item one-half lap-and-up-one-quarter" style="margin-bottom: 20px;">
                 <article class="article article--billboard-small">
                    <a href="<?php echo $the_permalink; ?>">
                        <div class="article__thumb">
                            <?php if (has_post_thumbnail( $the_post_ID )) echo $the_thumbnail; ?>
                        </div>
                        <div class="article__content">
                            <h2 class="article__title article--billboard-small__title">
                                <span class="hN"><?php echo $the_title; ?></span>
                            </h2>
                            <span class="article__description">
                                <?php $author_url = get_author_posts_url( $the_post_author ); ?>
                                <?php $author_name = get_the_author_meta( \'display_name\', $the_post_author ); ?>
                                <?php echo $author_name; ?> - <?php echo get_post_time(\'d.m.Y\', false, $the_post_ID, false); ?>
                            </span>
                            <span class="small-link"><?php _e(\'Read More\', wpgrade::textdomain()); ?><em>+</em></span>
                        </div> 
                    </a>
                </article>
            </li>
        <?php } ?>
        </ul>
    </div>
<?php endif; ?>
我明白了。。。

Warning: Invalid argument supplied for foreach() in /wp-includes/post-thumbnail-template.php on line 64
问题是这条线。。。

$the_thumbnail = get_the_post_thumbnail( $post_object->ID, array(200,150) );
我不明白为什么!有人能帮忙吗?

我正在使用WordPress v.3.9.1

3 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

此Trac记录单描述了您的问题和原因:

https://core.trac.wordpress.org/ticket/26321

我收到一条与以下内容相关的警告/错误update_post_thumbnail_cache() 功能:

警告:中为foreach()提供的参数无效/wp包含/发布缩略图模板。php第64行$wp_query->posts 缺少数组,但我们有一个$wp_query->post.

foreach ( $wp_query->posts as $post ) {
  if ( $id = get_post_thumbnail_id( $post->ID ) )
      $thumb_ids[] = $id;
}
票证#26321描述了当页面上的自定义WP\\U查询循环尝试获取帖子缩略图时,Core会尝试缓存当前查询中帖子的缩略图。

出现这个问题是因为这样做时,它会在查询中的帖子上循环,但它从不检查帖子数组是否为空。如果是,那么你会得到警告。

目前,我将等待WP Core中的解决方案。警告并没有破坏代码逻辑中的任何内容(尽管警告仍然是不可取的)。

不过,您可以提供帮助,登录到trac,下载补丁并帮助测试它们。您提供的测试和帮助越多,修复错误的速度就越快,它就越快进入WordPress核心。

如果您自己设法修复bug并满足所有单元测试,您可能会得到道具!在运行该版本的每个WordPress安装中,您的名字都会出现在“关于/贡献者”页面上

SO网友:bueltge

在获取缩略图之前,添加一条if语句,即您有一个缩略图。

if ( has_post_thumbnail( $post_object->ID ) )
     $the_thumbnail = get_the_post_thumbnail( $post_object->ID, array(200,150) );

SO网友:Tom J Nowell

我不知道你为什么认为帖子缩略图是罪魁祸首,但警告提到了foreach. 如果删除html,我们会看到:

$related_posts = get_field(\'related_posts\');
if ( $related_posts ) {
    foreach ( $related_posts as $post_object ) {
很明显,这就是你发出警告的原因。

由于您要为具有多个选项的字段返回一个值,因此这将是一个更好的检查:

$related_posts = get_field(\'related_posts\');
if ( !empty( $related_posts ) ) {
    foreach ( $related_posts as $post_object ) {
现在将捕获:

空数组空字符串假值

结束

相关推荐