首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Wordpress -分页和自定义数据库查询

Wordpress -分页和自定义数据库查询
EN

Stack Overflow用户
提问于 2016-01-26 11:05:30
回答 1查看 1.2K关注 0票数 1

我想有一个页面上的多个自定义帖子列出分页。对于我的查询,我没有使用通常的带参数的wp_query,而是使用了一个自定义的数据库select

下面是我的问题

代码语言:javascript
运行
复制
$query = "SELECT distinct($wpdb->posts.id), omvp_posts.* FROM $wpdb->posts
        inner JOIN $wpdb->postmeta AS rating ON( $wpdb->posts.ID = rating.post_id AND rating.meta_key = 'omvp_vote_rating')
        inner JOIN $wpdb->postmeta AS vote ON( $wpdb->posts.ID = vote.post_id AND vote.meta_key = 'omvp_total_vote')
        inner JOIN $wpdb->term_relationships ON ( $wpdb->posts.ID = $wpdb->term_relationships.object_id )
        WHERE $wpdb->posts.post_status = 'publish'
        AND $wpdb->posts.post_type = 'guides'
        " . $CategoryQuery . "
        ORDER BY rating.meta_value, vote.meta_value DESC LIMIT 0,5";

它正在回复我的帖子,按照我想要的顺序,但我只收到了5封

要循环返回我的结果,我使用以下代码:

代码语言:javascript
运行
复制
$pageposts = $wpdb->get_results($query, object); 
if ($pageposts):
global $post;
foreach ($pageposts as $post):
setup_postdata($post); 

对于我的导航,我以前使用这个函数,但我认为由于我使用的是一个自定义查询,所以这个函数不再起作用

代码语言:javascript
运行
复制
function wp_numeric_pagination() {
    global $wp_query;

    $big = 999999999;
    $search_for   = array( $big, '#038;' );
    $replace_with = array( '%#%', '' );
    $tag = '<div class="pagination">' . PHP_EOL;
    $tag .= paginate_links( array(
            'base'              => str_replace( $search_for, $replace_with, esc_url( get_pagenum_link( $big ) ) ),
            'format'            => '?paged=%#%',
            'current'           => max( 1, get_query_var('paged') ),
            'total'             => $wp_query->max_num_pages,
            'prev_next'         => True,
            'prev_text'         => __('«'),
            'next_text'         => __('»'),
            'before_page_number' => '<span>',
            'after_page_number'  => '</span>'
        ) ) . PHP_EOL;

    $tag .= '</div>' . PHP_EOL;
    echo $tag;
}

谢谢!

EN

Stack Overflow用户

发布于 2016-01-26 12:23:11

我修复了它,我必须在我的自定义查询的开始添加SQL_CALC_FOUND_ROWS

在我的查询中声明了这些变量

代码语言:javascript
运行
复制
    $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
    $post_per_page = intval(get_query_var('posts_per_page'));
    $offset = ($paged - 1)*$post_per_page;

所以我的新查询是

代码语言:javascript
运行
复制
$query = "SELECT SQL_CALC_FOUND_ROWS distinct($wpdb->posts.id), omvp_posts.* FROM $wpdb->posts
        inner JOIN $wpdb->postmeta AS rating ON( $wpdb->posts.ID = rating.post_id AND rating.meta_key = 'omvp_vote_rating')
        inner JOIN $wpdb->postmeta AS vote ON( $wpdb->posts.ID = vote.post_id AND vote.meta_key = 'omvp_total_vote')
        inner JOIN $wpdb->term_relationships ON ( $wpdb->posts.ID = $wpdb->term_relationships.object_id )
        WHERE $wpdb->posts.post_status = 'publish'
        AND $wpdb->posts.post_type = 'guides'
        " . $CategoryQuery . "
        ORDER BY rating.meta_value, vote.meta_value DESC 
        LIMIT " . $offset . ", " . $post_per_page;

在我的循环中添加了一些代码

代码语言:javascript
运行
复制
/* Determine the total of results found to calculate the max_num_pages
for navigation */
$sql_posts_total = $wpdb->get_var( "SELECT FOUND_ROWS();" );
$max_num_pages = ceil($sql_posts_total / $post_per_page);

if ($pageposts):
global $post;
foreach ($pageposts as $post):

并将我的max_num_paged传递给我的分页函数

代码语言:javascript
运行
复制
function wp_numeric_pagination($max_num_pages) {
global $wp_query;

$big = 999999999;
$search_for   = array( $big, '#038;' );
$replace_with = array( '%#%', '' );
$tag = '<div class="pagination">' . PHP_EOL;
$tag .= paginate_links( array(
        'base'              => str_replace( $search_for, $replace_with, esc_url( get_pagenum_link( $big ) ) ),
        'format'            => '?paged=%#%',
        'current'           => max( 1, get_query_var('paged') ),
        'total'             => $max_num_pages,
        'prev_next'         => True,
        'prev_text'         => __('«'),
        'next_text'         => __('»'),
        'before_page_number' => '<span>',
        'after_page_number'  => '</span>'
    ) ) . PHP_EOL;

$tag .= '</div>' . PHP_EOL;
echo $tag;
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35006413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档