How to use pre_get_posts?

时间:2013-06-11 作者:Charitos

我对自定义类别模板分页有问题,我搜索并阅读了使用pre\\u get\\u posts修复分页问题的内容。我阅读了WordPress Codex中的pre\\u get\\u posts信息,但我不知道如何使用它。

<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array(
            \'post_type\' => \'post\',
            \'meta_key\' => \'hmeromhnia_lhkshs\',
            \'orderby\' => \'meta_value_num\',
            \'order\' => \'ASC\',
            \'posts_per_page\' => 9,
            \'paged\' => $paged
            );


// get results
query_posts( $args );?>

<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>

// The Loop

<?php endwhile;?>
<?php endif; ?>

<?php if ($wp_query->max_num_pages > 1) tie_pagenavi(); ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>
这是我用于查询的代码,分页不起作用。我不知道何时何地插入pre\\u get\\u帖子。一般都不知道怎么用。

请帮帮我!

1 个回复
SO网友:Milo

从模板中删除所有查询代码,只保留默认循环。在示例代码中,您正在覆盖模板中的查询,在粘贴到注释中的代码中,您正在运行一个全新的查询。使用时,这两者都是不必要的pre_get_posts.

把你的pre_get_posts 代码输入functions.php. 你不必通过$paged 或者,除了设置要修改的特定参数之外,还可以执行任何其他操作,在查询发生之前,此代码正在运行:

function pregp_wpse_102658( $qry ) {
    if ( $qry->is_main_query() && $qry->is_category( \'expiresoon\' ) ) {
        $qry->set(\'meta_key\',\'hmeromhnia_lhkshs\');
        $qry->set(\'orderby\',\'meta_value_num\');
        $qry->set(\'order\',\'ASC\');
        $qry->set(\'posts_per_page\',9);
    }
}
add_action(\'pre_get_posts\',\'pregp_wpse_102658\');
然后在模板中使用普通的香草循环:

if ( have_posts() ) :
    while ( have_posts() ) : the_post();  
        // The Loop
    endwhile;
endif;
如果此特定类别没有其他特殊之处,则不再需要特定于该类别的类别模板,因为查询修改现在发生在模板之外。

结束

相关推荐

Pagination stops at page 6

下面的循环工作得很好,除了分页总是在第6页停止之外。无论我指定什么参数,它都不会显示超过6页的内容。有人知道为什么吗?<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $idxargs = array( \'posts_per_page\' => \'1\', \'paged\' =>