使用GLOBAL$POST;通过WP_QUERY获取定制帖子的特色图像

时间:2014-04-04 作者:jasonbradberry

我正在使用一个站点范围的函数将css添加到<head> 的页面拉入各种特征图像作为响应页面背景。它在我的站点的其他部分都非常有效,但在我使用自定义帖子类型调用帖子的页面上失败WP_Query. 我想这是因为WP_Query 不使用标准循环,我的函数使用global $post;.

有没有办法适应WP_Query 循环以使用函数?我需要的特色图像功能,也工作在我的网站,它使用标准的WP循环的其余部分。

--

以下是我如何称呼自定义帖子:

<?php $port_query = new WP_Query( array(
    \'post_type\' => \'portfolio\',
    \'posts_per_page\' => 1,
    \'orderby\' => \'rand\'
) ); 
if ( $port_query->have_posts() ): while ( $port_query->have_posts() ) : $port_query->the_post(); ?>
    <div class="page-bkg responsive-bkg">
        // page content here
    </div>
<?php endwhile; wp_reset_postdata(); endif;
以及从函数调用响应性特征图像的函数。php:

function bkg_featured_image() {

// call the global post variable
global $post;

if ( has_post_thumbnail( $post->ID ) ) : // checks whether the post has the featured image set

// get the post thumbnail ID for the page or post
$post_thumbnail_id = get_post_thumbnail_id( $post->ID );

// store the image sizes in an array. You can also add your own image sizes with the add_image_size function
$img_sizes = array( \'thumbnail\', \'medium\', \'large\', \'full\', \'thumb480\', \'thumb768\', \'thumb1280\', \'thumb1680\', \'thumb2048\' );

// grab the URL for each image size and store in a variable
foreach ( $img_sizes as $img_size ) {
    ${ \'img_src_\' . $img_size } = wp_get_attachment_image_src( $post_thumbnail_id, $img_size );
}

echo \'<style type="text/css"> 

    .responsive-bkg {
        background-image: url(\' . esc_url( $img_src_thumb768[0] ) . \');
    }

    @media screen and ( min-width: 768px ) {
        .responsive-bkg {
            background-image: url(\' . esc_url( $img_src_thumb1280[0] ) . \');
        }
    }

    @media screen and ( min-width: 1281px ) {
        .responsive-bkg {
            background-image: url(\' . esc_url( $img_src_thumb2048[0] ) . \');
        }
    }

</style>\';

   endif; // end if the featured image is set

} // end function my_featured_image

add_action( \'wp_head\', \'bkg_featured_image\' );

// (this function borrowed from http://s2webpress.com/responsive-featured-image-function-in-wordpress-themes/)

2 个回复
SO网友:s_ha_dum

$port_query->the_post(); 应设置$post global. 这不是问题所在。问题是您正在尝试使用$post 在二次循环运行之前(99%确定)。

你已经钓上了bkg_featured_image() 功能到wp_head. wp_head 在文档的标题中运行,除非您小心,否则将在其他模板代码之前运行。

如果您考虑WordPress主题模板加载的工作原理,您会意识到get_header() 负载header.php 应该是收割台挂钩着火的地方。这意味着之前的代码get_header() 在主题文件中,可以成功地使用这些挂钩。

解决方法是确保在get_header(). $post 应该设置为这些结果中的第一个帖子,您的代码应该可以工作。这并不意味着您必须在get_header(), 这没有道理。您只需运行查询。

当然,这样做只能在循环中获得第一个帖子。

SO网友:snaper9

WP\\U查询使用$post。可以找到方法和属性的完整列表In the codex here. 您确定所有公文包项目都有特色图片吗?您可能想使用\'meta_key\' => \'_thumbnail_id\', 在参数中,确保随机投资组合具有图像。您还可以使用签入模板

if( has_post_thumbnail( $post->ID ) ) :

    <div class="page-bkg responsive-bkg">
    // page content here
</div>

endif;

结束