2 WP_Query在同一页面上循环自定义帖子类型

时间:2013-11-01 23:52:38

标签: php wordpress loops slider custom-post-type

我很难解决这个问题,因为我无法弄明白。 我在同一页面上使用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个循环时,它会完美显示。但是当使用两个循环时,它仅显示投资组合部分的自定义后期元。我整天都在努力解决这个问题,请帮助我!谢谢:))

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

据我所知,在WP_Query()之后你应该使用:

wp_reset_postdata();

NOT wp_reset_query(); 。尝试一下。

  

wp_reset_query()$wp_query和全局发布数据还原到原始主查询。如果必须使用该功能,则应在query_posts(之后调用此函数。如下面的示例所示,强烈建议在查询之前使用pre_get_posts过滤器来更改查询参数。

  

wp_reset_postdata()用于在使用新$post的辅助查询循环后恢复主查询循环的全局WP_Query变量。它将$ post变量恢复到主查询中的当前帖子。

我还建议您尝试将可能的冗余变量名称$loop更改为$portfoliowLoop等。