簡體   English   中英

自定義$ wpdb查詢的Wordpress分頁

[英]Wordpress pagination for custom $wpdb query

我正在使用自定義$wpdb查詢來從數據庫中獲取所有注釋。

<?php 
$querystr = " SELECT comment_content, commentmeta1.meta_value 
AS comment_name, commentmeta2.meta_value 
AS comment_country FROM $wpdb->comments, $wpdb->commentmeta 
AS commentmeta1, $wpdb->commentmeta 
AS commentmeta2 
WHERE $wpdb->comments.comment_ID = commentmeta1.comment_id 
AND $wpdb->comments.comment_ID = commentmeta2.comment_id 
AND commentmeta1.meta_key = 'comment_name' 
AND commentmeta2.meta_key = 'comment_country' 
AND $wpdb->comments.comment_approved = 1 O
RDER BY $wpdb->comments.comment_date DESC";
$comment_info =  $wpdb->get_results($querystr, OBJECT);
echo '<ul>';
// display the results
foreach($comment_info as $info) { 
echo '<li class="commentBox"><p>"' . $info->comment_content . '"</p><h6>' . $info->comment_name . ', ' . $info->comment_country . '</h6></li>'; 
}
echo '</ul>';
?>

這很好用,可以完全按照我的需要插入並顯示數據,但是,我還需要在注釋中添加分頁。 我當前使用的代碼:

<?php
$total = $wpdb->get_var(" SELECT COUNT(comment_ID) 
FROM $wpdb->comments WHERE comment_approved = 1 ");

$comments_per_page = 4;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;

echo paginate_links( array(
  'base' => add_query_arg( 'cpage', '%#%' ),
  'format' => '',
  'prev_text' => __('&laquo;'),
  'next_text' => __('&raquo;'),
  'total' => ceil($total / $comments_per_page),
  'current' => $page
));
?>

盡管分頁鏈接確實按原樣出現,但$comments_per_page變量集無效,因為所有注釋仍顯示在一頁上。 我在自定義頁面模板上運行此代碼。

我要去哪里錯了?

因此,通過一些研究和大量的反復試驗,我設法對它進行了排序。 通過重新編碼一些代碼,我還必須設置一個偏移量變量,並使用LIMIT將其傳遞到我的數據庫查詢中。 最終的工作代碼如下。 希望這也可以幫助其他人。

<?php
    global $wpdb;
     $querystr = " SELECT comment_content, commentmeta1.meta_value 
     AS comment_name, commentmeta2.meta_value 
     AS comment_country 
     FROM $wpdb->comments, $wpdb->commentmeta 
     AS commentmeta1, $wpdb->commentmeta 
     AS commentmeta2 
     WHERE $wpdb->comments.comment_ID = commentmeta1.comment_id 
     AND $wpdb->comments.comment_ID = commentmeta2.comment_id 
     AND commentmeta1.meta_key = 'comment_name' 
     AND commentmeta2.meta_key = 'comment_country' 
     AND $wpdb->comments.comment_approved = 1 ";

     $total_query = "SELECT COUNT(1) FROM (${querystr}) AS combined_table";
     $total = $wpdb->get_var( $total_query );
     $items_per_page = 4;
     $page = isset( $_GET['paged'] ) ? abs( (int) $_GET['paged'] ) : 1;
     $offset = ( $page * $items_per_page ) - $items_per_page;
     $comment_info =  $wpdb->get_results($querystr .  "ORDER BY $wpdb->comments.comment_date DESC LIMIT ${offset}, $items_per_page");

     echo '<ul class="commentsList">';
    // display the results
     foreach($comment_info as $info) { 
          echo '<li class="commentBox"><p>"' . $info->comment_content . '"</p><h6>' . $info->comment_name . ', ' . $info->comment_country . '</h6></li>'; 
     }
     echo '</ul>';

     echo '<div class="commentPagination">';

     echo paginate_links( array(
        'base' => add_query_arg( 'paged', '%#%' ),
        'format' => '',
        'prev_text' => __('&laquo;'),
        'next_text' => __('&raquo;'),
        'total' => ceil($total / $items_per_page),
        'current' => $page
    ));

     echo '</div>';
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM