如何根据url按年列出文章?

时间:2019-02-14 作者:Mark20

Hie all,我正在尝试根据提供的url按年份列出帖子(例如:wordpressite.com/2004-这应该列出2004年创建的所有文章),不幸的是,如果给出了查询年份,以前解决方案中的所有建议方法都可以解决问题。

我试着创造这一年。wordpress层次结构中建议的php文件以及日期。php,但\\u loop()只提供了所有内容,没有列出特定年份的文章。

<?php
    query_posts(\'posts_per_page=10\');

    if ( have_posts() ) : while ( have_posts() ) : the_post();
        get_template_part( \'archive-content\', get_post_format() );
    endwhile; endif;

    wp_reset_query();
?>
这是我想要的一篇文章

<div class="row" style="margin-top: 15px;">
  <a href="<?php the_permalink() ?>">
    <div class="col col-sm-3 remove-left-margin">
        <?php $url = wp_get_attachment_url( get_post_thumbnail_id(get_the_ID()), \'thumbnail\' ); ?>
        <img src="<?php echo $url ?>" class="archive-card-image" />
    </div>
    <div class="col col-sm-9">
        <div><p class="archive-card-date"><?php the_date(); ?></p></div>
        <?php
            $categories = get_the_category();
            if ( ! empty( $categories ) ) {
                echo \'<div class="card-article-tag"><a class="archive-card-topic" href="\' . esc_url( get_category_link( $categories[0]->term_id ) ) . \'">\' . esc_html( $categories[0]->name ) . \'</a></div>\';
            }
        ?>
        <div><h4 class="archive-card-title"><b><?php the_title(); ?></b></h4></div>
    </div>
  </a>
</div>
我对wordpress还是很陌生,如果有任何帮助,我将不胜感激。

wp_get_archives(\'type=yearly\')
文档中没有说明如何使用上面提到的文章结构。

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

避免使用query_posts()

请不要使用

query_posts(\'posts_per_page=10\');
在您的date.php 模板文件override the main query instance 从而影响主回路。这真的会毁了这一天!

如果需要修改,例如posts_per_page 对于主日期查询,请使用pre_get_posts 在发出数据库请求之前修改查询变量的操作。

有一个严厉的警告query_posts() 中的用法manual.

所以remove 那部分和wp_reset_query() 它应该会再次起作用!

年度日期存档:修改帖子数量,下面是一个如何更改年度日期存档每页帖子的示例:

add_action( \'pre_get_posts\', function( $query ) {
    if ( is_admin() || ! $query->is_main_query() || ! $query->is_year() ) {
        return;
    }
    $query->set( \'posts_per_page\', 10 ); // Adjust the number to your needs!
} );
这里我们使用is_year() 以年度归档查询和is_main_query() 仅以主查询为目标。

年度日期存档:支持date-year.php 模板文件

我们还可以添加对date-year.php 模板文件,通过修改模板过滤器example 从手册中:

/**
 * Add a support for date-year.php template files.
 */
add_filter( \'date_template\', function( $templates ) {
    if ( ! is_year() ) {
        return $templates;
    }
    if ( ! is_array( $templates ) && ! empty( $templates ) ) { 
        $templates = locate_template( [ "date-year.php", $templates ], false ); 
    } elseif ( empty( $templates ) ) { 
        $templates = locate_template( "date-year.php", false ); 
    } else {
        $new_template = locate_template( [ "date-year.php" ] ); 
        if ( ! empty( $new_template ) ) { 
            array_unshift( $templates, $new_template ); 
        } 
    } 
    return $templates; 
} );
这样,我们只处理年度日期存档,而不处理其他日期存档,如使用date.php 模板文件。

注意,将代码片段添加到functions.php 文件或创建插件。切勿将某些代码片段从internet直接复制/粘贴到实时站点。始终先在开发人员/本地安装上进行测试。

相关推荐

echo a tax term in loop

对于列表中的每个项目,我需要在之后在此循环中回显CPT的一个术语。感谢您的指导或帮助。原始代码来自Stackoverflow。com,因为它起作用了。 <?php $da_place = get_field(\'smart_place\'); //acf field $args = array( \'post_type\' => \'to_do_items\', \'tax_query\' => array