Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have this inside my posts page (set in the admin panel: Posts Page: Blog):

Screenshot homepage setting

blog.php

   <?php
    /**
     * Template Name: Blog
     * @package WordPress
     * @subpackage Prominent
     * @since Prominent 1.0
     */
    get_header(); ?>
    <div class="shadow-top">
        <!-- Shadow at the top of the slider -->
    </div>
    <div id="intro2">
        <div class="container">
        </div><!-- .container -->
    </div><!-- #featured -->
    <div class="shadow-bottom">
        <!-- Shadow at the bottom of the slider -->
    </div>
    <div id="content">
        <div class="container">
            <div id="blog">
        <div class="container">
                <?php
                /* Run the loop to output the posts.
                 * If you want to overload this in a child theme then include a file
                 * called loop-index.php and that will be used instead.
                 */
                get_template_part( 'loop', 'index' );
                ?>
            <?php get_sidebar(); ?>
        </div><!-- .container -->
    </div><!-- #content-bottom -->
    <?php get_footer(); ?>

index.php

<?php
/**
 * The main template file.
 *
 * This is the most generic template file in a WordPress theme
 * and one of the two required files for a theme (the other being style.css).
 * It is used to display a page when nothing more specific matches a query.
 * E.g., it puts together the home page when no home.php file exists.
 * Learn more: http://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage Starkers
 * @since Starkers 3.0
 */

get_header(); ?>

            <?php
            /* Run the loop to output the posts.
             * If you want to overload this in a child theme then include a file
             * called loop-index.php and that will be used instead.
             */
            get_template_part( 'loop', 'index' );
            ?>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

loop.php

<?php
/**
 * The loop that displays posts.
 *
 * The loop displays the posts and the post content.  See
 * http://codex.wordpress.org/The_Loop to understand it and
 * http://codex.wordpress.org/Template_Tags to understand
 * the tags used in it.
 *
 * This can be overridden in child themes with loop.php or
 * loop-template.php, where 'template' is the loop context
 * requested by a template. For example, loop-index.php would
 * be used if it exists and we ask for the loop with:
 * <code>get_template_part( 'loop', 'index' );</code>
 *
 * @package WordPress
 * @subpackage Starkers
 * @since Starkers 3.0
 */
?>

<?php /* Display navigation to next/previous pages when applicable */ ?>
<?php if ( $wp_query->max_num_pages > 1 ) : ?>
        <?php next_posts_link( __( '&larr; Older posts', 'twentyten' ) ); ?>
        <?php previous_posts_link( __( 'Newer posts &rarr;', 'twentyten' ) ); ?>
<?php endif; ?>

<?php /* If there are no posts to display, such as an empty archive page */ ?>
<?php if ( ! have_posts() ) : ?>
        <h1><?php _e( 'Not Found', 'twentyten' ); ?></h1>
        <p><?php _e( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'twentyten' ); ?></p>
        <?php get_search_form(); ?>

<?php endif; ?>

<?php /* Display the contents of static page Posts page */ ?>
<?php
if ( 'page' == get_option('show_on_front') && get_option('page_for_posts') && is_home() ) : the_post();
    $page_for_posts_id = get_option('page_for_posts');
    setup_postdata(get_page($page_for_posts_id));
?>
    <div id="post-<?php the_ID(); ?>" class="page">
        <div class="entry-content">
            <?php the_content(); ?>
            <?php edit_post_link('Edit', '', '', $page_for_posts_id); ?>
        </div>
    </div>
<?php
    rewind_posts();
endif;
?>

<?php
    /* Start the Loop.
     *
     * In Twenty Ten we use the same loop in multiple contexts.
     * It is broken into three main parts: when we're displaying
     * posts that are in the gallery category, when we're displaying
     * posts in the asides category, and finally all other posts.
     *
     * Additionally, we sometimes check for whether we are on an
     * archive page, a search page, etc., allowing for small differences
     * in the loop on each template without actually duplicating
     * the rest of the loop that is shared.
     *
     * Without further ado, the loop:
     */ ?>
<?php while ( have_posts() ) : the_post(); ?>

<?php /* How to display posts in the Gallery category. */ ?>

    <?php if ( in_category( _x('gallery', 'gallery category slug', 'twentyten') ) ) : ?>
            <h2><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
            <?php twentyten_posted_on(); ?>

<?php if ( post_password_required() ) : ?>
                <?php the_content(); ?>
<?php else : ?>
<?php
    $images = get_children( array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC', 'numberposts' => 999 ) );
    $total_images = count( $images );
    $image = array_shift( $images );
    $image_img_tag = wp_get_attachment_image( $image->ID, 'thumbnail' );
?>
                    <a href="<?php the_permalink(); ?>"><?php echo $image_img_tag; ?></a>

                <p><?php printf( __( 'This gallery contains <a %1$s>%2$s photos</a>.', 'twentyten' ),
                        'href="' . get_permalink() . '" title="' . sprintf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ) . '" rel="bookmark"',
                        $total_images
                    ); ?></p>

                <?php the_excerpt(); ?>
<?php endif; ?>

                <a href="<?php echo get_term_link( _x('gallery', 'gallery category slug', 'twentyten'), 'category' ); ?>" title="<?php esc_attr_e( 'View posts in the Gallery category', 'twentyten' ); ?>"><?php _e( 'More Galleries', 'twentyten' ); ?></a>
                |
                <?php comments_popup_link( __( 'Leave a comment', 'twentyten' ), __( '1 Comment', 'twentyten' ), __( '% Comments', 'twentyten' ) ); ?>
                <?php edit_post_link( __( 'Edit', 'twentyten' ), '|', '' ); ?>

<?php /* How to display posts in the asides category */ ?>

    <?php elseif ( in_category( _x('asides', 'asides category slug', 'twentyten') ) ) : ?>

        <?php if ( is_archive() || is_search() ) : // Display excerpts for archives and search. ?>
            <?php the_excerpt(); ?>
        <?php else : ?>
            <?php the_content( __( 'Continue reading &rarr;', 'twentyten' ) ); ?>
        <?php endif; ?>

                <?php twentyten_posted_on(); ?>
                |
                <?php comments_popup_link( __( 'Leave a comment', 'twentyten' ), __( '1 Comment', 'twentyten' ), __( '% Comments', 'twentyten' ) ); ?>
                <?php edit_post_link( __( 'Edit', 'twentyten' ), '| ', '' ); ?>

<?php /* How to display all other posts. */ ?>

    <?php else : ?>
            <h2><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
            <?php twentyten_posted_on(); ?>

    <?php if ( is_archive() || is_search() ) : // Only display excerpts for archives and search. ?>
            <?php the_excerpt(); ?>
    <?php else : ?>
            <?php the_content( __( 'Continue reading &rarr;', 'twentyten' ) ); ?>
            <?php wp_link_pages( array( 'before' => '' . __( 'Pages:', 'twentyten' ), 'after' => '' ) ); ?>
    <?php endif; ?>

                <?php if ( count( get_the_category() ) ) : ?>
                    <?php printf( __( 'Posted in %2$s', 'twentyten' ), 'entry-utility-prep entry-utility-prep-cat-links', get_the_category_list( ', ' ) ); ?>
                    |
                <?php endif; ?>
                <?php
                    $tags_list = get_the_tag_list( '', ', ' );
                    if ( $tags_list ):
                ?>
                    <?php printf( __( 'Tagged %2$s', 'twentyten' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list ); ?>
                    |
                <?php endif; ?>
                <?php comments_popup_link( __( 'Leave a comment', 'twentyten' ), __( '1 Comment', 'twentyten' ), __( '% Comments', 'twentyten' ) ); ?>
                <?php edit_post_link( __( 'Edit', 'twentyten' ), '| ', '' ); ?>

        <?php comments_template( '', true ); ?>

    <?php endif; // This was the if statement that broke the loop into three parts based on categories. ?>

<?php endwhile; // End the loop. Whew. ?>

<?php /* Display navigation to next/previous pages when applicable */ ?>
<?php if (  $wp_query->max_num_pages > 1 ) : ?>
                <?php next_posts_link( __( '&larr; Older posts', 'twentyten' ) ); ?>
                <?php previous_posts_link( __( 'Newer posts &rarr;', 'twentyten' ) ); ?>
<?php endif; ?>

Now it doesn't matter how much I modify the code inside blog.php nothing changes (Even deleting everything changes nothing).

Am I misunderstanding Wordpress' loop?

share|improve this question
    
Just to make sure I don't miss anything: when you go to edit the "Blog" page (in the WordPress admin "Pages" section), its template (under "Page Attributes") is set to "Blog"? (Use @Jan in your reply and I get a notification) –  Jan Fabry Jan 26 '11 at 12:38
    
Yes, you can see the picture above. –  janoChen Jan 26 '11 at 12:43
add comment

2 Answers

up vote 4 down vote accepted

Don't forget about the "Help" button in the top-right of the WP admin screen!

The Help refers to the Settings Reading SubPanel page in the Codex which says the following:

Posts page - Select in the drop-down box the name of the Page that will now contain your Posts. If you do not select a Page here, your Posts will only be accessible via other navigation features such as category, calendar, or archive links. Even if the selected Page is Password protected, visitors will NOT be prompted for a password when viewing the Posts Page. Also, any Template assigned the Page will be ignored and the theme's index.php (or home.php if it exists) will control the display of the posts.

In other words, the page you choose in that drop-down will act as nothing more than a placeholder and its contents and template are ignored completely (only the title is used). Use home.php or index.php instead.

Also see Creating a Static Front Page.

share|improve this answer
    
Thanks I was starting to hate Wordpress, but now I love it again. –  janoChen Jan 26 '11 at 13:29
add comment

If I remember right (template hierarchy gets messy in these parts) when you assign page to be posts page then its template is ignored in favor of home page template branch.

So try editing home.php (if you have it) or index.php.

share|improve this answer
    
I deleted home.php. So you mean that Wordpress is ignoring blog.php and using index.php? –  janoChen Jan 26 '11 at 13:03
    
@janoChen if I am not mistaken that would be the case when you set it to be posts page. –  Rarst Jan 26 '11 at 13:07
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.