web-dev-qa-db-fra.com

Quelle est la meilleure alternative à ce code?

Après avoir lu 'ne pas utiliser query_posts', j'ai également lu que son utilisation est correcte pour afficher une liste de publications ou des publications de type publication personnalisée sur une page (à l'aide d'un modèle de page), et vous souhaitez effectuer une pagination. de ces postes fonctionnent '.

Donc, en voulant l'utiliser exactement pour cela, mon code est:

<?php $page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("&post_type=Host&showposts=10&orderby=title&order=asc&paged=$page");
while (have_posts()) : the_post();?>

<p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endwhile ?>

N'étant pas assez intelligent pour le savoir, je me demande s'il existe une meilleure alternative.

1
glvr

Merci à ceux qui ont suggéré des corrections.

Je ne pouvais pas utiliser ma pagination habituelle avec l'un ou l'autre, mais j'ai trouvé une solution alternative qui semble fonctionner et que je vais inclure ici comme aide possible pour les autres (car j'ai déjà vu diverses demandes pour des choses similaires).

<?php
$wp_query = new WP_Query();
$wp_query->query('post_type=Host&sort_by=title&order=ASC&showposts=1&paged='.$paged    );
get_template_part( 'page-templates/partial/paginate' );

while ($wp_query->have_posts()) : $wp_query->the_post();
echo "<p>";
the_title();
echo "</p>";
endwhile;

get_template_part( 'page-templates/partial/paginate' );
wp_reset_postdata();
?>

Le contenu du modèle de page partielle inclus est le suivant:

<?php
// Inserts block of numbered links to other posts, on posts/post summaries and search pages.

if (function_exists("pagination")) {pagination($additional_loop->max_num_pages);}

?>

Et la fonction est:

function pagination($pages = '', $range = 3)
{
$showitems = ($range * 2)+1;

global $paged;
if(empty($paged)) $paged = 1;

if($pages == '')
{
global $wp_query;
$pages = $wp_query->max_num_pages;
if(!$pages)
{
$pages = 1;
}
}

if(1 != $pages)
{
echo "<div class=\"pagination\"><span>Page ".$paged." of ".$pages."</span>";
if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo " <a href='".get_pagenum_link(1)."'>&laquo; First</a> ";
if($paged > 1 && $showitems < $pages) echo " <a href='".get_pagenum_link($paged - 1)."'>&lsaquo; Previous</a> ";

for ($i=1; $i <= $pages; $i++)
{
if (1 != $pages &&(!($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems))
{
 echo ($paged == $i)? "<span class=\"current\"> ".$i." </span>":"<a href='".get_pagenum_link($i)."' class=\"inactive\"> ".$i." </a>";
}
}

if ($paged < $pages && $showitems < $pages) echo " <a href=\"".get_pagenum_link($paged + 1)."\">Next &rsaquo;</a> ";
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems <     $pages) echo " <a href='".get_pagenum_link($pages)."'>Last &raquo;</a> ";
echo "</div><!-- /pagination -->\n";
}
}

Je ne réclame pas de crédit et ne prétends pas en savoir assez sur comment/pourquoi cela fonctionne. Et je suis surpris que dans la requête, si '$ wp_query' soit renommé (quelque chose comme 'the_query'), la pagination disparaisse.

2
glvr

Comme vous ne devriez jamais utiliser query_posts(), vous pouvez essayer le WP_Query:

<?php 
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$my_query = new WP_Query( array(
        'post_type' => 'Host',
        'posts_per_page' => 10,
        'order_by' => 'title',
        'order' => 'ASC',
        'paged' => $paged,
        )
    );
if ($my_query->have_posts()) {
    while ($my_query->have_posts()) {
        $my_query->the_post();?>
        <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p><?php
    }
    wp_reset_postdata();
}?>

Cela agit comme votre code, sans avoir à utiliser query_posts().

0
Jack Johansson

Placez ce code après votre boucle principale:

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$query_args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    'paged' => $paged,
    'orderby' => 'title',
    'order' => 'ASC',
    );

$custom_query = new WP_Query( $query_args );

if ( $custom_query->have_posts() ) { ?>
    <div><?php
    while ( $custom_query->have_posts() ) { 
        $custom_query->the_post(); ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br><?php 
    } ?>
    </div><?php
    // Pagination
    if ($custom_query->max_num_pages > 1) { ?>
        <nav class="prev-next-posts">
            <div class="prev-posts-link">
                <?php echo get_next_posts_link( '<br>Previous', $custom_query->max_num_pages ); ?>
            </div>
            <div class="next-posts-link">
                <?php echo get_previous_posts_link( '<br>Next' ); ?>
            </div>
        </nav><?php 
    } // End of Pagination
} else { ?>
    <p><?php echo 'No posts found'; ?></p><?php
}
wp_reset_postdata();
?>

Il fournit également une pagination. Vous pouvez changer les tags pour le rendre compatible avec le format de votre page.