WP_Query查询结果无法在循环外完整调用 仅能获取第一条数据如何解决
问题原因
你当前的代码每次循环时都直接对$book_data进行赋值操作,新的结果会覆盖上一轮循环存储的内容,所以最终只能拿到最后一条查询结果,核心逻辑错误为变量覆盖。
修复方案
有两种常用实现方式,按需选择即可:
方式1:字符串拼接存储
把赋值符号=改成拼接赋值符号.=,同时初始化变量避免未定义警告:
$args = array( 'post_type' => 'books', 'paged' => $paged, ); $wp_query = new WP_Query( $args); $count = $wp_query->post_count; // 先初始化变量 $book_data = ''; while ($wp_query->have_posts()) : $wp_query->the_post(); $book_name = get_post_meta( get_the_ID(), 'book_name', true ); $book_author = get_post_meta( get_the_ID(), 'book_author', true ); // 用.=拼接内容,不覆盖原有值 $book_data .= $book_name . ' - ' . $book_author . '<br />'; endwhile; wp_reset_postdata(); // 循环外直接访问输出 echo $book_data;
方式2:数组存储(灵活性更高)
如果后续需要单独调用某条图书数据,用数组存储更便于后续处理:
$args = array( 'post_type' => 'books', 'paged' => $paged, ); $wp_query = new WP_Query( $args); $count = $wp_query->post_count; // 初始化空数组 $book_data = array(); while ($wp_query->have_posts()) : $wp_query->the_post(); $book_name = get_post_meta( get_the_ID(), 'book_name', true ); $book_author = get_post_meta( get_the_ID(), 'book_author', true ); // 每条数据推入数组 $book_data[] = [ 'name' => $book_name, 'author' => $book_author ]; endwhile; wp_reset_postdata(); // 循环外输出可遍历数组 foreach($book_data as $book){ echo $book['name'] . ' - ' . $book['author'] . '<br />'; } // 也可单独调用某条数据,比如第一条:echo $book_data[0]['name'].' - '.$book_data[0]['author'];
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

