web-dev-qa-db-fra.com

La taxonomie personnalisée ne fonctionne pas avec posts_per_page dans le nouveau WP_query (problème de pagination)

OK, alors je m'occupe des taxonomies personnalisées pour la deuxième fois et dans les deux cas, j'ai rencontré ce problème d'utilisation de l'argument posts_per_page dans un scénario query_posts ou WP_query. En gros, si je définissais une limite personnalisée pour les posts par page, en cliquant sur les boutons "suivant" ou "précédent" me donnent 404 erreurs .. peu importe si j'utilise une structure à permalien personnalisée ou l'un des paramètres par défaut, résultat identique. Le seul moyen que ive ait réussi à contrôler le nombre de publications sur une page consiste à utiliser les paramètres de lecture du tableau de bord.

j'ai trouvé plusieurs mentions de ce même problème, mais je n'ai pas encore trouvé de solution satisfaisante en dehors des paramètres de tableau de bord mentionnés ci-dessus:

wordpress.org/support/topic/custom-taxonomy-navigation-problem-paged1-works-paged2-doesnt?replies=8#post-2093828

core.trac.wordpress.org/ticket/16168

wordpress.org/support/topic/custom-taxonomies-with-pagination-getting-404-page-not-found?replies=6#post-2093414

alors, voici le site im travaillant sur le problème:

http://www.purekreation.com (cliquez sur l'une des sections du nav, puis essayez de naviguer vers les pages précédentes en bas)

et voici mon code actuel (non fonctionnel):

    <?php get_header(); ?>

    <div id="art">

        <?php global $query_string, $paged, $wp_query, $wp;
        $count = 0;
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        echo $paged;
        ?>
        <?php $term = get_query_var('term'); echo $term;?>
        <?php $tax = get_query_var('taxonomy'); echo $tax;?>
        <?php
        $taxquery=new WP_Query(array('tax_query'=>array(array('taxonomy'=>$tax,'field'=>'slug','terms'=>$term)),'post_type'=>'art','showposts'=>1,'paged'=>$paged));
        while ( $taxquery->have_posts() ) : $taxquery->the_post(); ?>

    <?php $genre = wp_get_post_terms($post->ID, 'genre');?>
        <div id="post-<?php the_ID(); ?>" <?php post_class('post-'.$genre[0]->slug.' post-art');?>> 
            <h3 class="work-title"><?php the_title();?></h3>
            <?php get_the_10(); ?>
            <div class="the-content">
                <?php the_content(); ?>
            </div>
            <footer class="COL-10 clear">
                <small class="post-meta"><?php $terms = get_the_term_list( $post->ID, 'genre', 'Portfolio: ', ' ', '' );  echo $terms;?></small>
                <small class="post-meta">Project: <?php the_tags( '',', ','');?></small>
                <small class="post-meta">Client: <?php $meta = get_post_meta($post->ID, 'client', true); if($meta==''){echo 'Self';}else{echo $meta;}?></small>
                <small class="post-meta right"><a href="#masthead">Back to top</a></small>
                <div class="dash"></div>
            </footer>
        </div><!-- #post-## -->    
        <?php $count++; ?>
        <?php endwhile; ?>
                        <div id="nav-below" class="pagination">
        <?php if($taxquery->max_num_pages>1){?>
            <?php
            for($i=1;$i<=$taxquery->max_num_pages;$i++){?>
                    <a href="<?php bloginfo('url');?>/?<?php echo $tax;?>=<?php echo $term;?>&<?php echo 'paged=' . $i; ?>" <?php echo ($paged==$i)? 'class="selected"':'';?>><?php echo $i;?></a>
                    <?php
            }
            if($paged!=$taxquery->max_num_pages){?>
                    <a href="<?php bloginfo('url');?>/?<?php echo $tax;?>=<?php echo $term;?>&<?php echo 'paged=' . $i; //next link ?>">></a>
            <?php } ?>
    <?php } ?>
                        </div>
            <?php // Reset Post Data
            wp_reset_postdata();
             // End the loop. Whew.?>
    </div><!-- end #art -->
    <?php get_footer(); ?>

je ne suis pas le gars le plus qualifié PHP mais je connais un montant décent sur Wordpress et ce problème m'a littéralement fait perdre le sommeil à cause de cela. si quelqu'un a quelque chose à dire à ce sujet, il serait grandement apprécié.

5
J. Millington

devrait-ce être..

$paged = (get_query_var('page')) ? get_query_var('page') : 1;

WP_Query dans le codex:

Remarque sur la pagination: Vous devez définir get_query_var ('page'); si vous voulez que votre requête fonctionne avec la pagination. Depuis Wordpress 3.0.2, vous obtenez get_query_var ('page') au lieu de get_query_var ('paged'). Le paramètre de pagination 'paginé' pour WP_Query () reste le même.

6
Milo