2013-05-06 70 views
0

我跟着这个链接,并创建了自己的自定义查询与分页..但我真的不明白是怎么偏移作品, https://wordpress.stackexchange.com/questions/21626/pagination-with-custom-sql-query分页不显示自定义查询(get_results)

分页无法正常工作。我得到零值的抵消。

function spiciest(){ 
global $wpdb, $paged, $max_num_pages; 

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$post_per_page = intval(get_query_var('posts_per_page')); //6 
$offset = ($paged - 1)*$post_per_page; 
/* Custom sql here. I left out the important bits and deleted the body 
as it will be specific when you have your own. */ 
$sql = " 
    SELECT DISTINCT * FROM $wpdb->posts 
    INNER JOIN (SELECT *, SUBSTRING(name, 6) as 'post_ID', 
    votes_up AS votes_balance, 
    votes_up + votes_down AS votes_total 
    FROM thumbsup_items) AS thumbsup 
    ON $wpdb->posts.ID = thumbsup.post_ID 
    WHERE $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'post' 
    AND $wpdb->posts.post_password = '' 
    ORDER BY votes_up DESC, votes_balance DESC 
    LIMIT ".$offset.", ".$post_per_page."; "; 

$sql_result = $wpdb->get_results($sql, OBJECT); 

/* Determine the total of results found to calculate the max_num_pages 
for next_posts_link navigation */ 
$sql_posts_total = $wpdb->get_var("SELECT FOUND_ROWS();"); 
$max_num_pages = ceil($sql_posts_total/$post_per_page); 

print_r("offset ". $offset."\n") ; 
print_r("\n"."sql_posts_total ". $sql_posts_total."\n") ; 
print_r("\n"."max_num_pages ". $max_num_pages."\n") ; 
return $sql_result; 
} 

请现场看看吧..我打印vlues .. http://goo.gl/fZTck 它应该有7页共39项。

回答

1

这里的问题是极限,它只会算第一页,而不是整个查询。

我已经通过提供辅助SQL查询来计算最大页面来解决它。感谢我的朋友提供这个技巧。

这里是完整的代码。

function.php

function spiciest(){ 
global $wpdb, $paged, $max_num_pages; 

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$post_per_page = intval(get_query_var('posts_per_page')); //6 
$offset = ($paged - 1)*$post_per_page; 


// query normal post 
$query_spicy = " 
    SELECT DISTINCT * FROM $wpdb->posts 
    INNER JOIN (SELECT *, SUBSTRING(name, 6) as 'post_ID', 
    votes_up AS votes_balance, 
    votes_up + votes_down AS votes_total 
    FROM thumbsup_items) AS thumbsup 
    ON $wpdb->posts.ID = thumbsup.post_ID 
    WHERE $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'post' 
    AND $wpdb->posts.post_password = '' 
    ORDER BY votes_up DESC, votes_balance DESC"; 


//query the posts with pagination 
$spicy = $query_spicy . " LIMIT ".$offset.", ".$post_per_page."; "; 

$spicy_results = $wpdb->get_results($spicy, OBJECT); 

// run query to count the result later 
$total_result = $wpdb->get_results($query_spicy, OBJECT); 


$total_spicy_post = count($total_result); 
$max_num_pages = ceil($total_spicy_post/$post_per_page); 


return $spicy_results; 
} 

模板代码:

<?php 
$spiciest = spiciest(); 

if ($spiciest): 
    global $post; 
    foreach ($spiciest as $post) : 
     setup_postdata($post); 
?> 

/**** PUT TEMPLATE TAGS HERE *****/ 


<?php 
    endforeach; 
endif; 

?> 

然后在这里分页,请注意数组的总的。

global $wp_rewrite, $wp_query, $max_page, $page; 
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; 

$pagination = array(
    'base' => @add_query_arg('page','%#%'), 
    'format' => '', 
    'total' => $max_num_pages, 
    'current' => $current, 
    'prev_text' => __('PREV'), 
    'next_text' => __('NEXT'), 
    'end_size' => 1, 
    'mid_size' => 2, 
    'show_all' => false, 
    'type' => 'list' 
); 

if ($wp_rewrite->using_permalinks()) 
     $pagination['base'] = user_trailingslashit(trailingslashit(remove_query_arg('s', get_pagenum_link(1))) . 'page/%#%/', 'paged'); 

if (!empty($wp_query->query_vars['s'])) 
     $pagination['add_args'] = array('s' => get_query_var('s')); 

echo paginate_links($pagination); 
0

您的变量$offset的值始终相同。

所以只是将其替换

$offset = 1; 

$offset = ($paged - 1)*$post_per_page; 
+0

已经试过了。没有运气。谢谢btw, – 2013-05-06 13:56:38