制作了一个 WordPress 归档(Archive)页面模板,将博客中所有后期修改过的文章,按照最后更新日期存档到一起,并可以分页显示。
模板使用 WordPress query_posts 函数进行数据查询。虽然 Codex 上介绍说最好使用 WP_Query,但是我无法将分页(paged)参数传进去,或者让之其作用。
之前曾经简单介绍过 WordPress 中页面(page)模板的制作。如果对页面模板不甚了解,可以先看看。下面简要介绍这方面的东西,主要还是记录我这里用的文章数据查询方法。
首先,将自己所用的主题的首页模板,一般是主题文件夹中的 index.php
,复制一份,并改名为 template-lastupdated.php
。顺便编辑该文件,在开头的 <?php
下面增加下面的内容,目的是给这个模板起个名字,好在 WordPress 的管理后台的“页面管理”中容易认出这个模板。
/** Template Name: Template - Last Updated Posts Page */
其次,将下面的代码插入到该文件开头的 get_header(); ?>
前面。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_status' => 'publish', 'post_type' => 'post', 'posts_per_page' => 10, // 每页文章数目 'orderby' => 'modified', // 排序方式 'order' => 'DESC', 'paged' => $paged ); // 创建一个新的 filter 函数,用于确定那些经过修改的文章 // 实际上就是修改日期大于文章发表日期的那些文章 function filter_where( $where = '' ) { // 数据库查询条件:post_modified > post_date $where .= " AND DATE(post_modified) > DATE(post_date)"; return $where; } // 主查询 add_filter( 'posts_where', 'filter_where' ); query_posts( $args ); remove_filter( 'posts_where', 'filter_where' ); // 为了在文章列表的时候只显示文章的的摘要 // 如果想显示文章全文,删除下面的 2 行 // 所以全局 $more 参数为 0 global $more; $more = 0;
第三,保险起见,在该文件的靠近结尾的位置,或者更准确地说,在最后一个 endif; ?>
那里,在 endif;
和 ?>
之间回车换行,插入下面的代码:
// Reset Query wp_reset_query();
这是因为,前面通过 $args
设置更改了主查询 query_posts
的查询参数,现在给它重置一下。实际上没有这一步也没多大关系。
最后,将上述修改后的文件上传到主题文件夹中,然后到 WordPress 后台创建一个页面,根据需要写上标题,比如,最新更新过的的文章,在编辑页面“页面属性” -> “模板”那里选择“Template – Last Updated Posts Page”,发布此页面即可。
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/wordpress-updated-posts-archive/>。转载请保留此信息及相应链接。