利用function和短代码添加文章列表页面

前言

虽然已经有站点地图插件生成出sitemap界面了,但是它包含了分类和标签,而且很多插件不支持按照月份归类,所以我就自己想办法搞了一个页面,下面是教程。

教程

首先将如下代码放到主题的function.php内,然后将短代码放到需要展示的页面中

代码如下

// 注册文章列表短代码
function wp_post_list_shortcode($atts) {
    // 获取所有文章
    $posts = get_posts(array(
        'numberposts' => -1
    ));

    // 初始化归档数组
    $archives = array();

    // 遍历所有文章
    foreach ($posts as $post) {
        // 获取文章发布日期
        $date = get_the_date('Ym', $post->ID);

        // 如果归档数组中没有该日期,则添加
        if (!array_key_exists($date, $archives)) {
            $archives[$date] = array();
        }

        // 将文章添加到对应的归档日期中
        array_push($archives[$date], $post);
    }

    // 初始化输出字符串
    $output = '';

    // 遍历归档数组,按年月添加文章列表
    $prev_year = '';
    $prev_month = '';
    foreach ($archives as $date => $posts) {
        // 获取年份和月份
        $year = substr($date, 0, 4);
        $month = substr($date, 4, 2);

        // 如果年份不同,则添加一级标题
        if ($year != $prev_year) {
            if ($prev_year != '') {
                $output .= '';
            }
            $output .= '<h2>' . $year . '年</h2>';
        }

        // 如果月份不同,则添加二级标题
        if ($month != $prev_month) {
            if ($prev_month != '') {
                $output .= '';
            }
            $output .= '<h3>' . $month . '月</h3>';
        }

        // 添加文章列表
        foreach ($posts as $post) {
            $output .= '<li><a href="https://www.xrbk.cn/1119.html' . get_permalink($post->ID) . '">' . $post->post_title . '</a></li>';
        }

        // 更新年份和月份
        $prev_year = $year;
        $prev_month = $month;
    }

    // 添加最后一个二级标题和一级标题的闭合标签
    if ($prev_month != '') {
        $output .= '';
    }
    if ($prev_year != '') {
        $output .= '';
    }

    // 返回输出字符串
    return $output;
}
add_shortcode('wp_archives', 'wp_post_list_shortcode');

短代码:[wp_archives]

阅读剩余
THE END