0

私はそれを理解できないので、私はこの問題に苦労しています。同じページでカスタム投稿タイプ (スライダーとポートフォリオ) に 2 つの WP_Query ループを使用しています。また、両方のカスタム投稿タイプ用のカスタム メタ ボックスも作成しました。

スライダーとポートフォリオ アイテムを表示するためのホーム テンプレートとして使用する index.php のコードは次のとおりです。

<?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 に答える