taxonomy.php中的WP Query会杀死标准循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了taxonomy.php中的WP Query会杀死标准循环相关的知识,希望对你有一定的参考价值。
我创建了一个名为taxonomy-country.php的自定义分类存档页面。该文件运行完美并循环遍历当前国家/地区并显示其中的帖子。
在同一个模板上的这个循环上方,我想使用高级自定义字段显示所有帖子位置的地图。我之前使用过的代码没有任何问题但是没有存档文件,但是当在模板顶部使用时,地图和标记显示正常但标准存档循环不再显示。
wp_query在它之后杀死循环有什么问题?或者是否有另一个原因我无法在存档页面上的正常循环上运行查询?
<?php
// WP_Query arguments
$args = array (
'post_type' => 'home',
'order' => 'ASC',
'orderby' => 'title',
'posts_per_page' => '-1',
);
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() ) { ?>
<div class="acf-map">
<?php while ( $query->have_posts() ) {
$query->the_post(); ?>
<?php
$location = get_field('location');
if( !empty($location) ):
?>
<div class="acf-map">
<div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>">
<h2 class="name"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<strong class="number"><?php echo do_shortcode('[mrp_rating_result rating_form_id="2"]'); ?></strong>
</div>
</div>
<?php endif; ?>
<?php }
} else {
// no posts found
}
// Restore original Post Data
wp_reset_query() ?>
答案
更新:
刚发现这应该是更短的选择:
wp_reset_postdata()
原版的:
这条线杀了它:
// Restore original Post Data
wp_reset_query() ?
原因:您没有使用main $ wp_query,因此$ query-> the_post()不会干扰$ wp_query的当前索引。重置它将导致主循环重新启动。
参考:https://codex.wordpress.org/Function_Reference/wp_reset_query
更安全的方法是:
在类别循环之前:
global $post;
$temp_post = $post;
类别循环后:
$post = $temp_post;
只有3行,它应该工作。
干杯!
另一答案
根据上面的答案你必须将$ post存储在临时变量中并在wp_reset_query()之前恢复它
示例功能代码如下所示
function cd_meta_box_cb_hotel( $post )
{
global $post;
$temp_post = $post;
$selected=get_post_meta($post->ID, 'hotel_location_id',true);
$mquery = new WP_Query(array(
'post_type' => 'custom posttype',
'post_status' => 'publish',
'posts_per_page' => -1,
));
while ($mquery->have_posts()) {
$mquery->the_post();
// doing what you need
}
**$post = $temp_post;
wp_reset_query();**
}
以上是关于taxonomy.php中的WP Query会杀死标准循环的主要内容,如果未能解决你的问题,请参考以下文章
sql SQL Query替换数据库中的wp_posts内容