0

我很难解决这个问题,因为我无法弄清楚。我在同一页面上为自定义帖子类型(滑块和投资组合)使用了 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 个循环时,它会完美显示。但是当使用这两个循环时,它只显示投资组合部分的自定义帖子元。我整天都在为这个问题苦苦挣扎,请帮助我!谢谢 :)

4

2 回答 2

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);

您也可以尝试获取所有帖子元数据,以查看是否全部存在。

$meta = get_post_meta( get_the_ID( ) );
print_r($meta); // prints the meta array to the screen, check your data is there.
于 2013-11-02T01:14:37.130 回答
1

据我所知,每次WP_Query()你应该使用:

wp_reset_postdata();

不是wp_reset_query();. 试试这个。

wp_reset_query()将全局发布数据恢复$wp_query到原始主查询。query_posts(如果必须使用该函数,则应在 ) 之后调用该函数。如以下示例中所述,强烈建议pre_get_posts在进行查询之前使用过滤器来更改查询参数。

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

而且我还建议您尝试将可能的冗余变量名称更改为诸如此类$loop的名称$portfoliowLoop

于 2013-11-02T01:18:59.887 回答