Foreach loop conversion

User
Assistant
To convert the `while` loop to a `foreach` loop in your WordPress template, you can loop over the `$wp_query->posts` array, which contains all the posts. Here’s how you can modify your code:

<section id="blog-content-section" class="blog-search-section">
    <div class="row blog-section-container">
        <div class="blog-section">
            <?php 
    global $wp_query;
    echo $wp_query->request;
    ?>
            <?php if ( have_posts() ) : ?>
            <header>
                <h3><?php printf( __( 'Search Results for2: %s', 'your-theme' ), get_search_query() ); ?></h3>
            </header>        
            <?php 
            // Use foreach to loop through the posts
            foreach ( $wp_query->posts as $post ) : setup_postdata( $post ); 
            ?>
                <div class="search-result-wrapper blog-post-card">
                    <?php 
                    // Get the post ID
                    $post_id = get_the_ID();
                    echo 'Post ID: ' . $post_id; // Output the post ID
                    ?>
                    <a href="<?php the_permalink(); ?>" class="full-link-wrapper">
                        <?php if (has_post_thumbnail()) : ?>
                        <div class="thumbnail image-container">
                            <?php the_post_thumbnail('square-small', ['class' => 'img-circle img-fluid']); ?>
                        </div>
                        <?php endif; ?>
                        <div class="post-content text-container">
                            <h3><?php the_title(); ?></h3>
                        </div>
                        <span class="link">Read More</span>
                    </a>
                </div>
            <?php endforeach; wp_reset_postdata(); ?>

            <div class="container container-pager">
                <nav class="post-nav">
                    <ul class="pager">
                        <?php if (get_next_posts_link(__('Older posts', 'sage'), $wp_query->max_num_pages)) : ?>
                            <li class="previous button-search"><?php next_posts_link(__('Older posts', 'sage'), $wp_query->max_num_pages); ?></li>
                        <?php endif; ?>
                        <?php if (get_previous_posts_link(__('Newer posts', 'sage'))) : ?>
                            <li class="next button-search"><?php previous_posts_link(__('Newer posts', 'sage')); ?></li>
                        <?php endif; ?>
                    </ul>
                </nav>
            </div>

            <?php else : ?>
                <h2><?php _e( 'Nothing Found', 'your-theme' ); ?></h2>
            <?php endif; ?>  
        </div>       
    </div>
</section>

### Key changes:
1. Replaced the `while ( have_posts() ) : the_post();` loop with `foreach ( $wp_query->posts as $post ) :`.
2. Used `setup_postdata( $post );` to set up the post data for each iteration.
3. Added `wp_reset_postdata();` after the loop to reset the global `$post` object.

This approach is a more efficient way of iterating through posts when you already have a list of posts in `$wp_query->posts`.

Leave a Comment

Your email address will not be published. Required fields are marked *