【问题标题】:Pagination for WP Query not workingWP Query 的分页不起作用
【发布时间】:2017-08-09 19:39:09
【问题描述】:

我正在为 WordPress 中的自定义模板创建分页,并在单击第 1 页以外的所有其他页面时不断收到 404。我能够成功地为每个页面获取分页链接,但如前所述,不断返回 404。

这是我在functions.php中调用的分页函数:

function custom_page_navi( $totalpages, $page, $end_size, $mid_size )
{
    $bignum = 999999999;

    if ( $totalpages <= 1 || $page > $totalpages ) return;

        //NOTE: https://codex.wordpress.org/Function_Reference/paginate_links
    return paginate_links( array(
        'total'         => $totalpages,
        'prev_next'     => false,
        'type'          => 'list',
        'show_all'      => false,
        'end_size'      => $end_size,
        'mid_size'      => $mid_size
    ) );
}

这是taxonomy-pagename.php中的代码:

<?php

$this_page_taxonomy = $wp_query->get_queried_object(); //getting this page terms
$current_slug = $this_page_taxonomy->slug; //current slug
$go_cpt = 'hope_go'; //taxonony  name
$number = 1; // number of terms to display per page

// Setup for pagination:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset = ($paged > 0) ? $number * ($paged - 1) : 1;
$totalposts = $this_page_taxonomy->count;
$totalpages = ceil($totalposts / $number);

$hope_go_args = array(
 'post_type' => $go_cpt,
 'orderby' => 'meta_value',
 'meta_key' => 'hope_go_series_date',
 'meta_value' => $time,
 'meta_compare' => '>=',
 'paged' => $paged,
 'order' => 'ASC',
 'posts_per_page' => $number,
 'hierarchical' => true,
 'offset' => $offset,
 'tax_query' => array(
    array(
    'taxonomy' => 'hope_go_series',
    'field' => 'slug',
    'terms' => $current_slug,
    ) ,
)
);

$hope_go_recent_posts = new WP_Query($hope_go_args);

if ($hope_go_recent_posts->have_posts()):

  while ($hope_go_recent_posts->have_posts()):
  $hope_go_recent_posts->the_post();

    printf('<nav class="recent-series__pagination">%s</nav>',
    custom_page_navi($totalpages, $paged, 3, 0) < ? php

    //Content would go here

  endwhile;

?>

<?php

else : ?>

    <p><?php _e('Sorry, no posts matched your criteria.'); ?> </p>

<?php
endif;

wp_reset_postdata();

?>

我尝试了重写,但这不是问题。似乎除了第 1 页之外的所有页面都无法拉入相应的帖子。对此的任何见解将不胜感激!

【问题讨论】:

    标签: php wordpress pagination


    【解决方案1】:

    请按照以下步骤进行分页

    只需在您的模板中添加以下代码functions.php 或在您需要分页的地方添加脚本。

    第一步

    $customPagHTML     = "";
    $query             = "SELECT * FROM custom_table";
    $total_query     = "SELECT COUNT(1) FROM (${query}) AS combined_table";
    $total             = $wpdb->get_var( $total_query );
    $items_per_page = 4;
    $page             = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
    $offset         = ( $page * $items_per_page ) - $items_per_page;
    $result         = $wpdb->get_results( $query . " ORDER BY field DESC LIMIT ${offset}, ${items_per_page}" );
    $totalPage         = ceil($total / $items_per_page);
    

    然后上面的脚本有“custom_table”,您需要用您的表名替换它,您还可以选择添加 ORDER BY 或 GROUP BY 等。然后只需迭代具有查询结果的“$result”

    第二步

    if($totalPage > 1){
    $customPagHTML     =  '<div><span>Page '.$page.' of '.$totalPage.'</span>'.paginate_links( array(
    'base' => add_query_arg( 'cpage', '%#%' ),
    'format' => '',
    'prev_text' => __('&laquo;'),
    'next_text' => __('&raquo;'),
    'total' => $totalPage,
    'current' => $page
    )).'</div>';
    }
    

    第三步

    echo $customPagHTML;
    

    然后只要像上面那样在需要分页的地方输出 $customPagHTML 变量。

    【讨论】:

    • 谢谢!我现在试试这个,但是用我的表名替换“custom_table”是什么意思?如何获取我的表名?
    • wp_posts 表与您的帖子类型
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多