高级自定义字段保持返回相同的值

时间:2016-10-04 07:24:44

标签: php wordpress foreach advanced-custom-fields

所以详细说明,我有11个帖子,在每个帖子中我都将图像输入到预先自定义字段中。但是,当我打电话给他们时,我只收到了11个结果,但仅发布了一个帖子。

以下是我与之合作的内容。只是告诉你这是在functiuons.php,因为我想把它作为一个短代码,所以我可以在多种帖子类型上使用它。

            function get_slider() {
            $args = array(
            'post_type' => 'projekti',
            'posts_per_page' => -1,
                    );
                    $posts = get_posts($args);

                    ob_start();

                    if( $posts ): ?>
                    <div class="slider_slick">
                    <?php foreach($posts as $post): setup_postdata( $post ); ?>
                        <?php if( have_rows('slider') ): ?>
                            <?php while( have_rows('slider') ): the_row(); ?>
                                <?php // vars
                                $image = get_sub_field('image_slider');
                                $link = get_sub_field('slider_link');                       
                                ?>      
                                <div class="slide">
                                    <a href="<?php echo $link; ?>">
                                    <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" />
                                    </a>
                                </div>

                            <?php endwhile; ?>
                        <?php endif; ?>                         
                    <?php endforeach; ?>
                    <?php wp_reset_postdata(); ?>
                    </div>
                    <?php endif;
                    return ob_get_clean();
        }
    add_shortcode ('slick_slider' , 'get_slider');

我在我创建的模板上有几乎完全相同的代码,但是那个有用,有一个没有,我也不知道为什么。

2 个答案:

答案 0 :(得分:0)

传递acf have_rows()功能的当前帖子的ID。我已经使用$currentId = get_the_ID();然后在我需要的地方使用变量$ currentId。

        function get_slider() {
        $args = array(
        'post_type' => 'projekti',
        'posts_per_page' => -1,
                );
                $posts = get_posts($args);

                ob_start();

                if( $posts ): ?>
                <div class="slider_slick">
                <?php foreach($posts as $post): setup_postdata( $post );
                 $currentId = get_the_ID();
                  ?>
                    <?php if( have_rows('slider', $currentId) ): ?>
                        <?php while( have_rows('slider', $currentId) ): the_row(); ?>
                            <?php // vars
                            $image = get_sub_field('image_slider');
                            $link = get_sub_field('slider_link');                       
                            ?>      
                            <div class="slide">
                                <a href="<?php echo $link; ?>">
                                <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" />
                                </a>
                            </div>

                        <?php endwhile; ?>
                    <?php endif; ?>                         
                <?php endforeach; ?>
                <?php wp_reset_postdata(); ?>
                </div>
                <?php endif;
                return ob_get_clean();
    }
add_shortcode ('slick_slider' , 'get_slider');

答案 1 :(得分:0)

我必须添加

  global $post;

到我的函数顶部,让它工作。无论如何,谢谢你的帮助。