php - 为什么它会给出随机的帖子 ID

标签 php wordpress html wordpress-theming

我正在构建一个 WordPress 主题。我在评论部分遇到了一些麻烦。当显示评论时,它会随机获得帖子 ID。

我已将相同的代码放在两个不同的位置,首先它位于顶部,但在底部它不起作用。谁能告诉我为什么这在底部不起作用?!

这是我的single.php 文件

<?php get_template_part('/template-parts/standard-post-header');  ?>
    <main role="main">
        <!-- section -->
        <section>
            <div class="container background-color">
                <?php if (have_posts()): while (have_posts()) : the_post(); ?>

                <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>                   

                    <?php if (has_post_video( isset($post_id) ) != null) {
                    // Featured VIDEO -->
                        get_template_part('/template-parts/featured-video-post');
                    // END Featured VIDEO -->   
                    } else { ?>

                    <!-- Featured Image -->
                    <?php $header_type = get_post_meta(get_the_id(), 'meta-box-dropdown', true); ?> 

                    <?php if ($header_type == 'Slider') { 
                    // SLIDER Header
                        get_template_part('/template-parts/featured-slider-post');
                    ?>

                    <?php } else { 
                    // SLIDER Header
                        get_template_part('/template-parts/featured-normal-post');
                    } ?>                        
                    <!-- END Featured Image --> 
                    <?php } ?>

                    <div class="container container-post-color">
                        <div class="content">
                            <?php the_content(); ?>
                            <?php edit_post_link(); ?>
                        </div>
                    </div>

                    <?php 
                    global $post;
                    echo $post->ID;
                    ?>

                    <ol class="commentlist">
                        <?php
                            //THIS WORKS!!!
                            $comments = get_comments(array(
                                'post_id' => $post->ID,
                                'status' => 'approve'
                            ));


                            wp_list_comments(array(
                                'per_page' => 10, 
                                'reverse_top_level' => false 
                            ), $comments);
                        ?>
                    </ol>   

                    <!-- Post Navigation -->
                    <div class="container container-post-color top-space" style="padding-left: 0px; padding-right: 0px;">
                        <div id="left-side"><?php previous_post_link(); ?></div>
                        <div id="right-side"><?php next_post_link(); ?></div>
                        <?php echo wp_link_pages(); ?>
                    </div>

                    <!-- Tags -->
                    <div class="tags-area">
                        <?php echo the_tags(); ?>
                    </div>

                    <!-- Related Articles -->
                    <?php get_template_part('/template-parts/related-articles'); ?>

                    <!-- Coments Part -->               
                    <?php //get_template_part('/template-parts/comments'); ?>

                    <?php 
                    global $post;
                    echo $post->ID;
                    ?>

                    <ol class="commentlist">
                        <?php
                            //THIS DOES NOT WORKS!!! WHY?!
                            $comments = get_comments(array(
                                'post_id' => $post->ID,
                                'status' => 'approve' 
                            ));


                            wp_list_comments(array(
                                'per_page' => 10,
                                'reverse_top_level' => false 
                            ), $comments);
                        ?>
                    </ol>                   

                </article>
                <!-- /article -->
            </div>
            <!-- END of Container-Fluid -->

            <?php endwhile; ?>
            <?php else: ?>

            <!-- article -->
            <article>
                <div class="container background-color">
                    <h1 class="black mastheading-post"><?php _e( 'Sorry, nothing to display.', 'html5blank' ); ?></h1>
                </div>
            </article>
            <!-- /article -->

            <?php endif; ?>
        </section>
        <!-- /section -->
    </main>


    <!-- INSTAGRAM -->
    <?php get_template_part('/template-parts/instagram'); ?>


<?php get_footer(); ?>

related-articles.php

<div class="container container-post-color" style="padding-left: 0px; padding-right: 0px;">
    <div class="random">                
            <ul>
                <?php $posts = get_posts('orderby=rand&numberposts=4'); foreach($posts as $post) { ?>
                <div class="col-md-3 padding-zero">
                    <li>
                        <div class="random-thumb">
                            <?php the_post_thumbnail('full'); ?>
                        </div>
                        <div class="random-title">
                            <h1 class="black mastheading"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
                        </div>

                        <div class="black iltalica"><?php echo excerpt(25); ?></div>

                        <div class="category">
                            <div class="random-category">
                                <h5><?php echo the_category();?></h5> 
                            </div>
                        </div>

                    </li>
                </div> 
                <?php } ?>
            </ul>   
    </div>
</div>

最佳答案

所以首先,因为你在循环中,所以你在任何地方都使用了 global $post; ... $post->ID 你应该可以使用 get_the_ID() 代替。

其次,我强烈怀疑问题出在您的模板部分 /template-parts/related-articles 可能弄乱了 main loop .我建议您查看该文件,看看它本身是否在一系列帖子上循环 - 很可能它没有以一种可以在主循环内重复使用的方式干净利落地进行。

如果您需要帮助解决问题,您可以将该文件的代码添加到您的问题中。

更新

好的,确实如此,您需要在 related-articles 循环之后重置循环数据:

...
<?php
    }
    wp_reset_postdata(); // <----- add this after your loop
?>
</ul>
...

希望这对您有所帮助!

关于php - 为什么它会给出随机的帖子 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728066/

相关文章:

php - 将 javascript 代码放入 HTML 代码行不起作用

有响应时 PHP SoapClient 故障

php - 如何将带有 CAST 函数的 SQL 转换为 Eloquent

javascript - 使用 HTML/JavaScript 在网页中嵌入画面 View

javascript - 转换 html 表日志文件

javascript - 从 Controller 输出到 HTML 表单

JavaScript 进度条不起作用

php - 使用 Woocommerce 中的元查询从任何地方排除特定产品

css - WordPress 中的均衡器

css - HTML 视频,CSS 位置固定,背景附件在 Chrome 上固定