当前浏览:首页 / WordPress函数 / wp_get_archives()

wp_get_archives( string|array $args = '' )

根据类型和格式显示存档链接

archive 存档


描述

另见


参数

$args

(string|array) (可选) 默认存档链接参数,可选的

  • 'type'
    (string) 要检索的存档类型,接受:'daily'、'weekly'、'monthly'、'yearly'、'postbypost' 或 'alpha'。'postbypost' 和 'alpha' 都同样显示存档链接列表以及文章标题,而不是显示日期。两者之间的区别是:'alpha' 将按文章标题排序,而 'postbypost' 将按文章日期排序。默认为 'monthly'
  • 'limit'
    (string|int) 要限制查询的链接数量,默认为空 (无限制)
  • 'format'
    (string) 使用 $before 和 $after 参数来确定每个链接的格式,接受:'link' (<link> 标签)、'option' (<option> 标签)、'html' (<li> 标签) 或自定义格式,生成一个链接,$before在前,$after在后,默认为 'html'
  • 'before'
    (string) 在每个链接的开头添加标记。
  • 'after'
    (string) 标记附加到每个链接的末尾。
  • 'show_post_count'
    (bool) 是否在链接旁边显示文章数量,默认 false
  • 'echo'
    (bool|int) 输出或者返回链接列表,默认 1|true 输出
  • 'order'
    (string) 是否使用升序或降序,接受:'ASC' 或 'DESC',默认 'DESC'
  • 'post_type'
    (string) 文章类型,默认 'post'
  • 'year'
    (string) 年份,默认当前年份
  • 'monthnum'
    (string) 月份数,默认当前月份
  • 'day'
    (string) 日,默认当前日
  • 'w'
    (string) 周,默认当前周

默认值: ''


返回

(void|string) 如果'echo'参数为true,则无返回;如果'echo'为false,则为存档链接。



源码

查看源码 官方文档


更新日志

版本描述
5.2.0添加了$year$monthnum$day$w参数
4.4.0添加了$post_type参数
1.2.0开始引入

用户贡献的笔记

  • 贡献者:Codex

    显示最近两周每日档案的链接列表
    列出过去14天中至少有一篇文章的链接,每天的总计数在括号中,例如“2015年11月2日(3)”。

    <?php wp_get_archives( array( 'type' => 'daily', 'limit' => 14, 'show_post_count' => 'true' ) ); ?>
  • 贡献者:Codex

    下拉框
    在选项标签中显示每月存档的下拉菜单,带有日志计数(使用JavaScript导航到所选存档页面)。

    <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
    	<option value=""><?php esc_attr( _e( 'Select Month', 'textdomain' ) ); ?></option> 
    	<?php wp_get_archives( array( 'type' => 'monthly', 'format' => 'option', 'show_post_count' => 1 ) ); ?>
    </select>
  • 贡献者:Khoi Pro

    为了过滤特定的类别/term,我们有一个特定的案例来添加过滤器。如果我们希望根据get_query_var(‘news_category’)更改存档链接,它就可以工作。

    例如,在同一个模板上,我们有:

    – News Category #1 has dropdown of 2019, 2018, 2017.
    – News Category #2 has dropdown of 2017.

    如果用户访问/news/news-category-2/2019,则不会返回文章。如果当前类别是新闻类别,我们应该禁用2018年和2019年的存档链接。

    下面的代码用于分类“news_category”和自定义文章类型“news”。要使用默认文章,您应该更改回分类法“category”和默认文章“post”类型。

    在 templates/custom-archive-template.php

      add_filter( 'getarchives_where', 'custom_archive_by_category_where' );
      add_filter( 'getarchives_join', 'custom_archive_by_category_join' );
    
      $args = array();
    
      wp_get_archives(
        array(
          'type'            => 'yearly',
          'format'          => 'option',
          'post_type'       => 'news',
        )
      );
    
      remove_filter( 'getarchives_where', 'custom_archive_by_category_where' );
      remove_filter( 'getarchives_join', 'custom_archive_by_category_join' );
    

    在 functions.php:

      add_filter( 'getarchives_where', 'custom_archive_by_category_where' );
      add_filter( 'getarchives_join', 'custom_archive_by_category_join' );
    
      $args = array();
    
      wp_get_archives(
        array(
          'type'            => 'yearly',
          'format'          => 'option',
          'post_type'       => 'news',
        )
      );
    
      remove_filter( 'getarchives_where', 'custom_archive_by_category_where' );
      remove_filter( 'getarchives_join', 'custom_archive_by_category_join' );
    

    了解更多关于getarchives_wheregetarchives_join 钩子

  • 贡献者:LokiWP

    要返回仅包含名称和值的年份数组,请执行以下操作:

    array(
       array(
          'name' => 'January 2020',
          'value' => 'http://demo.com/2020/01/'
       ),
       array(
          'name' => 'February 2020',
          'value' => 'http://demo.com/2020/02/'
       )
    )
    

    我们必须使用echo=false&format=custom

    function theme_name_get_year_archive_array() {
      $years = array();
      $years_args = array(
        'type' => 'monthly',
        'format' => 'custom', // My advise: WordPress Core shoud be add support "format=array" to keep it easy to catch for many custom cases
        'before' => '',
        'after' => '|',
        'echo' => false,
        'post_type' => 'news',
        'order' => 'ASC'
      );
    
      // Get Years
      $years_content = wp_get_archives($years_args);
      if (!empty($years_content) ) {
        $years_arr = explode('|', $years_content);
        $years_arr = array_filter($years_arr, function($item) {
          return trim($item) !== '';
        }); // Remove empty whitespace item from array
    
        foreach($years_arr as $year_item) {
          $year_row = trim($year_item);
          preg_match('/href=["']?([^"'>]+)["']>(.+)</a>/', $year_row, $year_vars);
    
          if (!empty($year_vars)) {
            $years[] = array(
              'name' => $year_vars[2], // Ex: January 2020
              'value' => $year_vars[1] // Ex: http://demo.com/2020/01/
            );
          }
        }
      }
    
      return $years;
    }
    
  • 贡献者:Codex

    默认用法

    <?php 
    $args = array(
    	'type'            => 'monthly',
    	'limit'           => '',
    	'format'          => 'html', 
    	'before'          => '',
    	'after'           => '',
    	'show_post_count' => false,
    	'echo'            => 1,
    	'order'           => 'DESC'
    );
    wp_get_archives( $args );
    ?>
  • 贡献者:Codex

    显示过去12个月档案的链接列表

    <?php wp_get_archives( array( 'type' => 'monthly', 'limit' => 12 ) ); ?>
  • 贡献者:Codex

    显示最后20篇文章的标题
    使用custom作为format参数的值,并指定beforeafter值(因此,在本例中,打印标题在span标签内,并用逗号分隔):

    <?php wp_get_archives( array( 'type' => 'postbypost', 'limit' => 20, 'format' => 'custom', 'before' => '<span class="my-post-title">', 'after' => '</span>, ' ) ); ?>
  • 贡献者:Codex

    显示所有文章的链接标题,按字母顺序排列
    可能在网站地图上使用。

    <?php wp_get_archives( 'type=alpha' ); ?>
  • 贡献者:talymo36

    在存档中的每个链接项上使用自定义包装的示例。如果你正在做需要更复杂结构的特殊造型,这会很有帮助。

    <?php
    	$args = array(
    		'type'            => 'monthly',
    		'limit'           => '',
    		'format'          => 'custom',
    		'before'          => '<div class="sub-item">',
    		'after'           => '</div>',
    		'show_post_count' => false,
    		'echo'            => 1,
    		'order'           => 'DESC'
    	);
    	wp_get_archives( $args );
    ?>