Wordpress查询 - foreach / while

时间:2014-02-18 16:10:12

标签: php wordpress pagination

在Wordpress模板中,我有一个索引文件,显示了一些博客文章。查询不存在(但我想它可以被覆盖),但博客帖子通过have_posts(),while-loop等显示。

它也使用了一些分页。

我希望博客帖子按照属于帖子作者的元键进行排序。我用这个

找到了解决方案
$querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->usermeta umeta
    WHERE wposts.post_author = umeta.user_id
    AND umeta.meta_key = 'wp-last-login' 
    AND wposts.post_type = 'post' 
    AND wposts.post_status = 'publish'
    ORDER BY umeta.meta_value DESC
    ";

$pageposts = $wpdb->get_results($querystr, OBJECT);

然后制作一个foreach循环。

这样做很好,但它会让分页变得混乱。

因此,我想帮助找出如何使用foreach方法处理分页或者如何使用has_posts()使用的普通查询方法对上面的实际代码进行排序, while-query等原始代码的概述(但没有查询)就在这里。

<?php if (have_posts()) : ?>
<?php $count = 0; while (have_posts()) : the_post(); $count++; ?>

    <!-- Show posts -->

<?php endwhile; ?>

<?php 
    $next_page = get_next_posts_link(__('Next', 'Destro')); 
    $prev_pages = get_previous_posts_link(__('Previous', 'Destro'));
    if(!empty($next_page) || !empty($prev_pages)) :
    ?>
    <div class="pagination">
        <?php if(!function_exists('wp_pagenavi')) : ?>
        <div class="al"><?php echo $prev_pages; ?></div>
        <div class="ar"><?php echo $next_page; ?></div>
        <?php else : wp_pagenavi(); endif; ?>
    </div><!-- /pagination -->
    <?php endif; ?>

etc...

----编辑-----

我现在试图这样做,但它似乎不起作用。它在just_posts()之前插入并且循环开始

function joinPostmeta($join) {
    global $wp_query, $wpdb;
    $join .= "LEFT JOIN $wpdb->usermeta umeta ON $wpdb->posts.post_author = umeta.user_id";
    return $join;
}
function wherePostmeta($where) {
    global $wp_query, $wpdb;
    $where .= "AND umeta.meta_key = 'wp-last-login'";
    return $where;
}
function orderbyPostmeta($orderby_statement) {
    global $wp_query, $wpdb;
    $orderby_statement .= "umeta.meta_value DESC'";
    return $orderby_statement;
}


add_filter('posts_join', 'joinPostmeta');
add_filter('posts_where', 'wherePostmeta');
add_filter('posts_orderby', 'orderbyPostmeta');

1 个答案:

答案 0 :(得分:1)

你应该像普通的WordPress循环一样坚持使用WP_Query,但是使用posts_joinposts_whereposts_orderby过滤器来改变它生成的查询,以便查询用户元数据就像你在查询中一样。

这将允许WP_Query应用其通常的分页规则和其他行为。