有什么比这段代码更好的选择呢?

时间:2017-05-17 作者:glvr

在阅读了“不要使用query\\u posts”之后,我还了解到可以使用“在页面上显示帖子列表或自定义帖子类型的帖子(使用页面模板),并且您希望对这些帖子进行分页”。

因此,为了实现这一目的,我的代码是:

<?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 ?>
由于不够聪明,我想知道是否有更好的选择。

3 个回复
SO网友:glvr

感谢那些提出修复建议的人。

我也无法使用正常的分页,但确实找到了另一种似乎可行的解决方案,我在这里将其包括在内,以尽可能帮助其他人(因为我看到了各种类似的请求)。

<?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();
?>
包含的部分页面模板的内容包括:

<?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);}

?>
其功能是:

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";
}
}
我不认为这是值得称赞的,也不假装对这是如何/为什么起作用有足够的了解。我感到困惑的是,在查询中,如果将“$wp\\u query”重命名(类似于“the\\u query”),分页就会消失。

SO网友:Johansson

因为你不应该使用query_posts(), 您可以尝试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();
}?>
这就像您的代码一样,无需使用query_posts().

SO网友:Frank P. Walentynowicz

将此代码置于主循环之后:

<?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();
?>
它还提供分页。您可以更改标记以使其与页面格式兼容。

结束

相关推荐