Theme Template File Modification for LoopBuddy Support

From IThemes Codex
Jump to: navigation, search

The main feature of supporting the loop-standard is allowing The Loop to be replaced with a new one, such as one provided by a plugin or customization. In order for this to function properly, each of the theme's template files will need a modification that allows The Loop to be conditionally replaced. The dynamic_loop() function provides this functionality. A Loop wrapped in this modification looks as follows.

<?php if ( ! dynamic_loop() ) : ?>
	// Original Loop Code
<?php endif; ?>

With this modification in place in each of the theme's template files, a plugin or customization is able to replace The Loop. If no replacement is done, The Loop is not replaced and is used as if no modification had been made.


The following is the unmodified single.php file from the Twenty Fourteen theme:

<?php
/**
 * The Template for displaying all single posts
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */

get_header(); ?>

    <div id="primary" class="content-area">
        <div id="content" class="site-content" role="main">
            <?php
                // Start the Loop.
                while ( have_posts() ) : the_post();

                    /*
                     * Include the post format-specific template for the content. If you want to
                     * use this in a child theme, then include a file called called content-___.php
                     * (where ___ is the post format) and that will be used instead.
                     */
                    get_template_part( 'content', get_post_format() );

                    // Previous/next post navigation.
                    twentyfourteen_post_nav();

                    // If comments are open or we have at least one comment, load up the comment template.
                    if ( comments_open() || get_comments_number() ) { 
                        comments_template();
                    }
                endwhile;
            ?>
        </div><!-- #content -->
    </div><!-- #primary -->

<?php
get_sidebar( 'content' );
get_sidebar();
get_footer();

After modifying it to support the loop-standard, the file looks as follows:

<?php
/**
 * The Template for displaying all single posts
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */

get_header(); ?>

    <div id="primary" class="content-area">
        <div id="content" class="site-content" role="main">
            <?php if ( ! dynamic_loop() ) : ?>
                <?php
                    // Start the Loop.
                    while ( have_posts() ) : the_post();

                        /*
                         * Include the post format-specific template for the content. If you want to
                         * use this in a child theme, then include a file called called content-___.php
                         * (where ___ is the post format) and that will be used instead.
                         */
                        get_template_part( 'content', get_post_format() );

                        // Previous/next post navigation.
                        twentyfourteen_post_nav();

                        // If comments are open or we have at least one comment, load up the comment template.
                        if ( comments_open() || get_comments_number() ) {
                            comments_template();
                        }
                    endwhile;
                ?>
            <?php endif; ?>
        </div><!-- #content -->
    </div><!-- #primary -->

<?php
get_sidebar( 'content' );
get_sidebar();
get_footer();

The modifications on lines 14 and 35 wrap The Loop in a conditional that allows loop-standard features to replace The Loop as needed.

In order for this to function properly in a theme, each template file must be updated to support the modification. Since The Loop for one or more templates may be moved to a template part file, check all the theme's files to ensure that each instance of The Loop is modified.


← Back to LoopBuddy Codex Home

Personal tools
Namespaces
Variants
Actions
iThemes Codex
Codex Navigation
Toolbox