[英]2 WP_Query loops for custom post types on the same page
我很難解決這個問題,因為我無法解決這個問題。 我在同一頁面上使用2個WP_Query循環來自定義帖子類型(滑塊和組合)。 我還為自定義帖子類型創建了一個自定義元框。
所以這里是index.php的代碼,我使用它作為Home模板來顯示滑塊和項目組合項:
<?php
/*
Template Name: Home
*/
?>
<?php get_header(); ?>
<div id="header-container">
<div id="header">
<?php rm_slider(); ?> // This is where Im calling slider function to display the slider.
</div>
</div>
<div id="content">
<div class="container">
<?php $loop = new WP_Query(
array(
'post_type' => 'portfolio',
'posts_per_page' => -1
));
?>
<?php if ($loop->have_posts()) { ?>
<ul class="services">
<?php while ($loop->have_posts()) : $loop->the_post(); ?>
<li>
<?php if (has_post_thumbnail()) : the_post_thumbnail(); ?>
<?php else: ?>
<p>No portfolio image</p>
<?php endif; ?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p>Client: <?php echo get_post_meta($post->ID, '_project_client', true); ?></p>
<p>Client website: <?php echo get_post_meta($post->ID, '_project_client_url', true); ?></p>
</li>
<?php endwhile; } ?>
<?php wp_reset_query(); ?>
<?php get_footer(); ?>
這是slider.php的代碼:
<?php
// create slider markup
function rm_slider() {
$slider_loop = new WP_Query(
array(
'post_type' => 'slider',
'posts_per_page' => -1
));
if ($slider_loop->have_posts()) { ?>
<div id="slider">
<div class="slider-container">
<?php while ($slider_loop->have_posts()) : $slider_loop->the_post(); ?>
<div>
<?php if (has_post_thumbnail()) : the_post_thumbnail(); ?>
<?php else: ?>
<p>No slider image</p>
<?php endif; ?>
<div class="slide-info">
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php
$slide_url = get_post_meta($post->ID, '_slide_url', true);
if ($slide_url != '') { ?>
<a href="<?php echo $slide_url; ?>" class="more-info"><?php echo $slide_url; ?></a>
<?php } else { echo 'empty?'; ?>
<?php
}
?>
</div>
<?php endwhile; ?>
</div><!-- .slider-container -->
</div><!-- #slider -->
<?php }
wp_reset_query();
}
?>
我確定自定義元框的實際內容是存在的,因為當我只使用1個循環時,它會完美顯示。 但是當使用兩個循環時,它僅顯示投資組合部分的自定義后期元。 我整天都在努力解決這個問題,請幫助我! 謝謝 :)
奇怪,嘗試改變這個:
$slide_url = get_post_meta($post->ID, '_slide_url', true);
echo get_post_meta($post->ID, '_project_client', true);
為了這:
$slide_url = get_post_meta(get_the_ID(), '_slide_url', true);
echo get_post_meta(get_the_ID(), '_project_client', true);
您也可以嘗試獲取所有post meta只是為了看看它是否全部存在。
$meta = get_post_meta( get_the_ID( ) );
print_r($meta); // prints the meta array to the screen, check your data is there.
據我所知,在每個WP_Query()
你應該使用:
wp_reset_postdata();
不 。 嘗試一下這個。 wp_reset_query();
wp_reset_query()
將$wp_query
和全局發布數據恢復到原始主查詢。 如果必須使用該函數,則應在query_posts(
)之后調用此函數。 如下面的示例所示,強烈建議pre_get_posts
查詢之前使用pre_get_posts
過濾器來更改查詢參數。
和
wp_reset_postdata()
用於在使用新WP_Query
的輔助查詢循環之后恢復主查詢循環的全局$post
變量。 它將$ post變量恢復到主查詢中的當前帖子。
我還建議你嘗試將可能的冗余變量名稱(如$loop
更改$portfoliowLoop
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.