使用wp_get_ages列出特定年份的每月档案

时间:2020-03-28 作者:Josef Ulander

我只想要一份简单的清单,上面有一年的每月档案。像这样:

一月、二月、三月、四月等等。我不需要像每年分组这样的花哨玩意儿。理想情况下,我希望有这样的短代码[月存档年份=2019年]。这是我取得的进展,但“Year”参数似乎没有任何作用。

function my_monthly_archives() { 

$my_archives = wp_get_archives(array(
    \'type\'=>\'monthly\', 
    \'limit\'=>10,
    \'echo\'=>0,
    \'year\'=>\'2018\'
));

return $my_archives; 

} 

// Create a shortcode
add_shortcode(\'month-archive\', \'my_monthly_archives\'); 

// Enable shortcode execution in text widget
add_filter(\'widget_text\', \'do_shortcode\'); 

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

这个year, monthnum, dayw (周)参数仅用于突出显示/预选列表/输出中的当前项目,并且仅在日期和类别存档等存档页面上生效。“突出显示”,我的意思是WordPress会添加selected=\'selected\' (如果formatoption) 或aria-current="page" (对于其他formatlink) 到输出。类似这样(注意selected 属性):

// Assume $results contains database\'s rows (row objects).
// And \'2018\' is in the $args you pass to wp_get_archives().
$output = \'\';
foreach ( $results as $row ) {
    if ( is_archive() && \'2018\' === $row->year ) {
        $output .= \'<option value="2018" selected>2018</option>\';
    } else {
        $output .= \'<option value="2018">2018</option>\';
    }
}
尝试以下内容并访问任何存档页面,您将看到年份2018 选项已预选:

$my_archives = \'<select>\' . wp_get_archives( array(
    \'type\'   => \'yearly\',
    \'limit\'  => 10,
    \'echo\'   => 0,
    \'year\'   => \'2018\',
    \'format\' => \'option\', // this outputs an <option>
) ) . \'</select>\';
以下其他示例,假设2018年11月1日有一个(公开)帖子:

And that you\'re on an archive page &mdash;在其他页面(如单篇帖子)上,这四个参数(year, monthnum, dayw) 默认为main query.

何时formatmonthly, November 2018 将预先选择:

$my_archives = \'<select>\' . wp_get_archives( array(
    \'type\'     => \'monthly\',
    \'limit\'    => 10,
    \'echo\'     => 0,
    \'year\'     => \'2018\',
    \'format\'   => \'option\',
    \'monthnum\' => 11,
) ) . \'</select>\';
format 是weekly, October 29, 2018–November 4, 2018 (2018年第44周)

$my_archives = \'<select>\' . wp_get_archives( array(
    \'type\'   => \'weekly\',
    \'limit\'  => 10,
    \'echo\'   => 0,
    \'year\'   => \'2018\',
    \'format\' => \'option\',
    \'w\'      => 44,
) ) . \'</select>\';
format 是daily, November 1, 2018 将预先选择:

$my_archives = \'<select>\' . wp_get_archives( array(
    \'type\'     => \'daily\',
    \'limit\'    => 10,
    \'echo\'     => 0,
    \'year\'     => \'2018\',
    \'format\'   => \'option\',
    \'monthnum\' => 11,
    \'day\'      => 1,
) ) . \'</select>\';
以便year 参数不会提供您想要的结果;但是,可以使用getarchives_where hook 结合自定义参数,如下所示:

这应该放在主题的functions.php 文件:

add_filter( \'getarchives_where\', function ( $where, $parsed_args ) {
    if ( ! empty( $parsed_args[\'in_year\'] ) ) {
        $year = absint( $parsed_args[\'in_year\'] );
        $where .= " AND YEAR(post_date) = $year";
    }
    return $where;
}, 10, 2 );
wp_get_archives(), 只需使用in_year 参数仅包括特定年份的存档:(*您可以更改参数名称,但也可以在上面进行更改。)

$my_archives = wp_get_archives( array(
    \'type\'    => \'monthly\', 
    \'limit\'   => 10,
    \'echo\'    => 0,
    \'in_year\' => \'2018\', // custom parameter
) );
但您仍然可以使用标准year 参数以突出显示/预选相关项目。

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。