如何更改wp_get_archive()的SQL查询

时间:2015-01-29 作者:user3848698

我正在使用wp_get_archive() 在里面category.php.

如果我在第页,共页category=2 它应该只显示我的那个类别的档案。然而,它适用于所有类别。

那么如何更改wp_get_archive() 它只重定向到该特定类别的存档模板category.php

<?php get_header(); ?>
 <?php 
   $args =array(               
                \'posts_per_page\' =>1,                 
           );
  $loop = new WP_Query( $args );                                            
  if($loop->have_posts()):while ( $loop->have_posts() ): $loop->the_post();
   the_content();
  endwhile;
  endif;
 ?>
 <?php wp_get_archives( array( \'type\' => \'daily\') ); ?>
如果相同的代码archive.php

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

查看source code 对于wp_get_archives(), 有一个名为getarchives_join 可用于限制wp_get_archives() 到特定类别

您还需要获取当前类别ID,该ID易于使用get_queried_object_id()

您可以尝试这样的操作来显示当前查看类别的存档

add_filter( \'getarchives_join\', function ($r) 
{

    global $wpdb;

    if( is_category() ) {
        $category_id = get_queried_object_id();
        $r =  $wpdb->prepare( " INNER JOIN $wpdb->term_relationships AS tr ON $wpdb->posts.ID = tr.object_id  AND tr.term_taxonomy_id IN (%s)", $category_id );
    }
    return $r;

}, 10, 2 );
编辑上一次编辑时,只需对代码添加一到两条注释。因为这是类别中的代码。php和归档。php模板,您不应该使用自定义查询。我怀疑这就是你的大问题所在。

使用pre_get_posts 更改主查询以满足您的需要。您必须删除自定义查询并返回这两个归档页面中的默认循环。

这就是您的分类页面的外观

<?php get_header(); ?>

<?php 
if( have_posts() ) {

    while ( have_posts() ) { 
        the_post();

        the_content();

    }

}
?>

<?php wp_get_archives( array( \'type\' => \'daily\') ); ?>
然后,在您的函数中。php,添加以下代码

add_action( \'pre_get_posts\', function ( $q ) 
{

    if(    !is_admin() 
        && $q->is_main_query() 
        && (    $q->is_category() 
             || $q->is_date() 
            ) 
    ) {
        $q->set( \'posts_per_page\', 1 );
    }
});
这将在归档页和分类页上将每页的帖子设置为一个

结束