web-dev-qa-db-fra.com

La page d'accueil n'obéissant pas post par page sur la première page uniquement

Je travaille sur un modèle personnalisé pour mon bureau. J'ai une page d'accueil statique et une page d'accueil statique pour afficher les articles du blog. J'ai quelques problèmes mineurs et devrai créer quelques autres questions au fur et à mesure que je résous chaque problème ... Quoi qu'il en soit, ce problème m'intéresse beaucoup.

Pendant le développement, la publication par page est définie sur 3 (Paramètres> Lecture). Sur la page de blog (home.php), je vois mes derniers messages et c'est très bien. Le problème est que la page d’accueil affiche environ 8 articles de blog au lieu des 3 qu’elle est configurée pour afficher. Je ne fais rien de personnalisé avec la requête et j'utilise simplement la boucle pour afficher le contenu du message.

La pagination fonctionne correctement et fonctionne comme prévu. Toutes les pages paginées affichent uniquement 3 publications et correspondent aux publications correctes pour chaque page. Le seul problème avec cela est que la page d'accueil affiche d'abord 8 articles au lieu des 3 définis dans les paramètres.

Toute aide à ce sujet est très appréciée. J'ai essayé de chercher et je ne pouvais trouver personne ayant ce problème, donc je suis désolé s'il s'agit d'un article en double et j'espère que je peux obtenir un Push dans la bonne direction.

J'ai également vérifié avec le thème Twenty Eleven et le même problème se pose. C'est le modèle dont j'ai copié une logique.

J'ai désactivé tous les plugins et le problème existe toujours. Les seuls plug-ins que j'utilisais étaient WordPress SEO et WP Lightbox 2. Même après les avoir désactivés, le problème persiste.

Si j'augmente le nombre de messages par page à 15, il indique 17 ... Si je l'augmente à 6, je montre 10. Si j'augmente le nombre à 7 ou 8, je montre 11 messages. Si je le règle à 9, je montre 12. 10 spectacles 13 ... 12 spectacles 14 ... Comme vous pouvez le constater, cela est très frustrant. Le seul endroit où je modifie la requête se trouve sur la page d'accueil, mais je doute que cela affecte la page d'accueil. Je fais essentiellement une requête personnalisée sur la page d'accueil pour afficher uniquement les 6 derniers messages collants. Je m'assure que la réinitialisation de la requête par la suite soit sûre. Je ne sais toujours pas pourquoi cela se produit. Cela m'a rendu fou!

J'ai fourni mon code ci-dessous:

home.php

<?php 
/*
Template Name: Home Page (Blog Roll)
*/
?>

<?php get_header(); ?>

<div id="main">
    <div id="content" class="list-box">
        <?php
        /* Run the loop to output the page.
        * If you want to overload this in a child theme then include a file
        * called loop-page.php and that will be used instead.
        */
        get_template_part( 'loop', 'single' );
        ?>
        <div class="page-nav">
            <?php if (get_next_posts_link()): ?>
            <span class="nav-button older-posts"><?php next_posts_link( '&laquo; Older posts'); ?></span>
            <?php 
            endif;
            if (get_previous_posts_link()): ?>
            <span class="nav-button newer-posts"><?php previous_posts_link( 'Newer posts &raquo;' ); ?></span>
            <?php endif; ?>
        </div>        
    </div>
    <?php get_sidebar(); ?>
</div>
<?php get_footer(); ?>

loop-single.php

<?php
/**
* The loop that displays a single post.
*
* 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-single.php.
*
* @package WordPress
* @subpackage EHRScopev2
*/
?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="box">
            <div class="box-holder">
                <div class="box-frame">
                    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                        <h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                        <em class="meta"><?php ehrscope_posted_on(); ?>&nbsp;|&nbsp;<span class="total-comments"><?php comments_popup_link(); ?></span></em>
                        <?php
                        if (!is_single() && has_excerpt()):
                            the_excerpt();
                        else:
                            the_content(__('Continue reading', 'ehrscope') . ': <em>' . the_title('', '', false) . '</em>');
                        endif;
                        ?>
                        <div class="clear"></div>
                        <?php
                        if (is_single()):
                            ehrscope_wp_link_pages();
                            $tags = wp_get_post_tags($post->ID);
                            ?>
                            <p class="entry-meta"><?php ehrscope_show_tags(); ?></p>
                            <?php if ($tags): ?>
                                <a href="javascript:void(0);" id="toggle-related-posts" class="button"><?php _e('Show Related Posts', 'ehrscope'); ?></a>
                                <?php
                            endif;
                        endif;
                        ?>
                    </div>
                </div>
            </div>
        </div>

        <?php if (is_single()): ?>
            <div class="box" id="related-posts-cage">
                <div class="box-holder">
                    <div class="box-frame">
                        <div>
                            <?php if (is_single()): ?>
                                <?php
                                if ($tags):
                                    $tag_ids = array();
                                    foreach ($tags as $individual_tag) {
                                        $tag_ids[] = $individual_tag->term_id;
                                    }
                                    $args = array(
                                        'tag__in' => $tag_ids,
                                        'post__not_in' => array($post->ID),
                                        'posts_per_page' => 10, // Number of related posts to display.
                                        'caller_get_posts' => 1
                                    );
                                    $my_query = new WP_Query($args);
                                    if ($my_query->have_posts()):
                                        ?>
                                        <h3><?php _e('Related Posts', 'ehrscope'); ?></h3>
                                        <ul>
                                            <?php
                                            while ($my_query->have_posts()) : $my_query->the_post();
                                                ?>
                                                <li>
                                                    <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                                                    &nbsp;
                            <!--                                                <span class="related-posts-date"><?php the_time('F jS, Y'); ?></span>-->
                                                </li>
                                                    <?php
                                            endwhile;
                                            ?>
                                        </ul>
                                        <?php
                                    endif;
                                endif;
                            endif;
                            ?>
                        </div>
                    </div>
                </div>
            </div>
            <?php
        endif;
        comments_template('', true);
    endwhile;
else:
    ?>
    <div class="box">
        <div class="box-holder">
            <div class="box-frame">
                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                    <h2><?php _e('No Results', 'ehrscope'); ?></h2>
                    <p><?php _e('Sorry, no posts matched your criteria.', 'ehrscope'); ?></p>
                </div>
            </div>
        </div>
    </div>
<?php endif; ?>

Contenu de $wp_query:

Array
(
    [page] => 0
    [pagename] => blog
    [error] => 
    [m] => 0
    [p] => 0
    [post_parent] => 
    [subpost] => 
    [subpost_id] => 
    [attachment] => 
    [attachment_id] => 0
    [name] => 
    [static] => 
    [page_id] => 0
    [second] => 
    [minute] => 
    [hour] => 
    [day] => 0
    [monthnum] => 0
    [year] => 0
    [w] => 0
    [category_name] => 
    [tag] => 
    [cat] => 
    [tag_id] => 
    [author_name] => 
    [feed] => 
    [tb] => 
    [paged] => 0
    [comments_popup] => 
    [meta_key] => 
    [meta_value] => 
    [preview] => 
    [s] => 
    [sentence] => 
    [fields] => 
    [category__in] => Array
        (
        )

    [category__not_in] => Array
        (
        )

    [category__and] => Array
        (
        )

    [post__in] => Array
        (
        )

    [post__not_in] => Array
        (
        )

    [tag__in] => Array
        (
        )

    [tag__not_in] => Array
        (
        )

    [tag__and] => Array
        (
        )

    [tag_slug__in] => Array
        (
        )

    [tag_slug__and] => Array
        (
        )

    [ignore_sticky_posts] => 
    [suppress_filters] => 
    [cache_results] => 1
    [update_post_term_cache] => 1
    [update_post_meta_cache] => 1
    [post_type] => 
    [posts_per_page] => 3
    [nopaging] => 
    [comments_per_page] => 5
    [no_found_rows] => 
    [order] => DESC
)
2
Jeremy

Il semble que ce soit une erreur de Noobie.

Les posts collants sont ajoutés en haut de la page, ce qui augmente le nombre de posts sur la blogroll initiale. Je devais juste enlever les posts collants d'être collants et cela a résolu le problème.

J'utilise uniquement les posts collants pour la page d'accueil et je ne veux pas qu'ils soient en haut de la page home.php.

Merci de votre aide!

home.php mis à jour

<?php
/*
Template Name: Home Page (Blog Roll)
*/
?>

<?php get_header(); ?>

<div id="main">
    <div id="content" class="list-box">
        <?php
        // Prevents sticky posts form always being at the top of the page. (still shows them in normal sort order)
        $queryObject = new WP_Query(array(
            'caller_get_posts' => '1',
            'paged' => get_query_var('paged')
        ));        
        /* Run the loop to output the page.
        * If you want to overload this in a child theme then include a file
        * called loop-page.php and that will be used instead.
        */
        get_template_part('loop', 'custom-query');
        ehrscope_posts_page_navigation();
        ?>
    </div>
    <?php get_sidebar(); ?>
</div>
<?php get_footer(); ?>

loop-custom-query.php

<?php
/**
* The loop that displays a single post.
*
* 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-single.php.
*
* @package WordPress
* @subpackage EHRScopev2
*/
global $queryObject;
?>
<?php if ($queryObject->have_posts()) : while ($queryObject->have_posts()) : $queryObject->the_post(); ?>
        <div class="box">
            <div class="box-holder">
                <div class="box-frame">
                    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                        <h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                        <em class="meta"><?php ehrscope_posted_on(); ?>&nbsp;|&nbsp;<span class="total-comments"><?php comments_popup_link(); ?></span></em>
                        <?php
                        if (!is_single() && has_excerpt()):
                            the_excerpt();
                        else:
                            the_content(__('Continue reading', 'ehrscope') . ': <em>' . the_title('', '', false) . '</em>');
                        endif;
                        ?>
                        <?php
                        if (is_single()):
                            ehrscope_wp_link_pages();
                            $tags = wp_get_post_tags($post->ID);
                            ?>
                            <p class="entry-meta"><?php ehrscope_show_tags(); ?></p>
                            <?php if ($tags): ?>
                                <a href="javascript:void(0);" id="toggle-related-posts" class="button"><?php _e('Show Related Posts', 'ehrscope'); ?></a>
                                <?php
                            endif;
                        endif;
                        ?>
                    </div>
                </div>
            </div>
        </div>

        <?php if (is_single()): ?>
            <div class="box" id="related-posts-cage">
                <div class="box-holder">
                    <div class="box-frame">
                        <div>
                            <?php if (is_single()): ?>
                                <?php
                                if ($tags):
                                    $tag_ids = array();
                                    foreach ($tags as $individual_tag) {
                                        $tag_ids[] = $individual_tag->term_id;
                                    }
                                    $args = array(
                                        'tag__in' => $tag_ids,
                                        'post__not_in' => array($post->ID),
                                        'posts_per_page' => 10, // Number of related posts to display.
                                        'caller_get_posts' => 1
                                    );
                                    $my_query = new WP_Query($args);
                                    if ($my_query->have_posts()):
                                        ?>
                                        <h3><?php _e('Related Posts', 'ehrscope'); ?></h3>
                                        <ul>
                                            <?php
                                            while ($my_query->have_posts()) : $my_query->the_post();
                                                ?>
                                                <li>
                                                    <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                                                    &nbsp;
                            <!--                                                <span class="related-posts-date"><?php the_time('F jS, Y'); ?></span>-->
                                                </li>
                                                    <?php
                                            endwhile;
                                            ?>
                                        </ul>
                                        <?php
                                    endif;
                                endif;
                            endif;
                            ?>
                        </div>
                    </div>
                </div>
            </div>
            <?php
        endif;
        comments_template('', true);
    endwhile;
else:
    ?>
    <div class="box">
        <div class="box-holder">
            <div class="box-frame">
                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                    <h2><?php _e('No Results', 'ehrscope'); ?></h2>
                    <p><?php _e('Sorry, no posts matched your criteria.', 'ehrscope'); ?></p>
                </div>
            </div>
        </div>
    </div>
<?php endif; ?>
0
Jeremy

Effectuez une recherche dans tout le répertoire de votre thème pour les fonctions "is_home ()" et "is_front_page ()". La seule chose à laquelle je peux penser est qu’il existe une fonction écrite quelque part qui fait que la page de couverture compte 8 posts, quel que soit le nombre de posts réglés par page sur le reste du blog.

0
Thomas Frank