如何正确重置POST数据

时间:2012-08-02 作者:byronyasgur

我在循环中调用了这段代码,以获取图像元数据(标题/标题和描述)。它工作得很好,但只适用于循环中的第一个帖子。所以我认为它需要重置。从这里看我想wp_rest_postdata(); 是重置查询的正确方法,但除了第一篇文章外,其他所有文章的输出仍然失败,它会将第一篇文章中的数据重复到其他每一篇文章中。

function get_image_metadata() {

    $image_id = get_post_thumbnail_id($post->ID);
    $args = array(
        \'post_type\' => \'attachment\',
        \'post_status\' => null,
        \'post_parent\' => $post->ID,
        \'include\'  => $image_id
        ); 
    $image_data = get_posts($args);

    if ($image_data && isset($image_data[0])) {
        $meta_output[\'title\'] = $image_data[0]->post_title; 
        $meta_output[\'caption\'] =  $image_data[0]->post_excerpt; 
        $meta_output[\'description\'] =  $image_data[0]->post_content; 
    }
    //wp_reset_query();
    wp_rest_postdata();
    return $meta_output;
}

1 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

使用时get_posts() 除非通过setup_postdata() 在您的(通常是foreach) 环

因此,由于您没有设置post数据,因此不需要重置post数据。

但除了第一个帖子外,其他所有帖子的输出都失败了

我想那是因为你把全球$post 在函数内部,但不是首先将其全球化:

$image_id = get_post_thumbnail_id($post->ID);
$args = array(
    \'post_type\' => \'attachment\',
    \'post_status\' => null,
    \'post_parent\' => $post->ID,
    \'include\'  => $image_id
    ); 
$image_data = get_posts($args);
尝试添加global $post; 使用前$post->ID:

global $post;
$image_id = get_post_thumbnail_id($post->ID);
$args = array(
    \'post_type\' => \'attachment\',
    \'post_status\' => null,
    \'post_parent\' => $post->ID,
    \'include\'  => $image_id
    ); 
$image_data = get_posts($args);
如果这不是问题所在,您能否澄清:

您从中获得的数据$iamge_data

  • 调用函数的上下文

  • 结束

    相关推荐