怎么用代碼制作WordPress的歸檔頁面

先看看效果,這個是我網站的歸檔頁面:http://www.shenjieblog.com/archives

其實WordPress自帶了一個歸檔的功能,但是只能顯示在網頁中的某一個部分,但是我想單獨制作一個歸檔頁面,因為看見很多網站都有這個,制作一個單 獨的歸檔頁面可以讓訪問者清晰的看到我的網站內容,可以讓訪問者輕松地找到自己想要的內容,我最開始在陽光盒子的網站看見了他網站的歸檔頁面,感覺效果很 不錯,于是想制作一個和他一樣的效果,百度了一下,加上自己的修改和美化,弄了一下午終于做成了上圖的效果,不多說,方法如下:

原文:
折騰功能:代碼實現WordPress歸檔頁面模板[WP原生函數篇]
原創作者:zwwooooo
特點:
1. 按照年份、月份顯示文章列表
2. 顯示每月的文章數量(需要配合及Query)
3. 顯示每篇文章的評論數
4. 使用 WordPress 原生函數實現數據調用
5. 這個存檔函數會在數據庫生成一個表 zww_archives_list 來做緩存,只在發表/修改文章時才更新,減少數據庫查詢。
6. 即使不使用第5點的數據庫緩存功能也比以前的直接 SQL 語句省資源。
這兩天稍微空閑點,看到博客草已人高,所以就找找以前有沒有沒解決的來訪朋友評論提到的問題。然后想起我 2012 年寫的《代碼實現WordPress歸檔頁面模板[WP原生函數篇]》,按照這篇文檔折騰的朋友大部分都成功了,但是總是有部分朋友說出現文章排列不對或 者文章不全什么的,因為覺得大部分朋友都能成功,所以就一直沒去分析。
今天分析了一下,應該是有些月份如果 0 篇文章就會出現問題,這是判斷代碼沒寫好的原因,于是自己想了一下,就重寫了一個。
簡單說下步驟,
1. 歸檔函數
下面代碼放到主題文件 functions.php 里面,另外注意代碼里面有中文,所以要把 functions.php 文件編碼改為 UTF8 無 BOM 格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* Archives list v2014 by zwwooooo | http://zww.me */
function zww_archives_list() {
????if( !$output = get_option('zww_db_cache_archives_list') ){
????????$output = '<div id="archives"><p><a id="al_expand_collapse" href="#">全部展開/收縮</a> <em>(注: 點擊月份可以展開)</em></p>';
????????$args = array(
????????????'post_type' => 'post', //如果你有多個 post type,可以這樣 array('post', 'product', 'news')?
????????????'posts_per_page' => -1, //全部 posts
????????????'ignore_sticky_posts' => 1 //忽略 sticky posts
????????);
????????$the_query = new WP_Query( $args );
????????$posts_rebuild = array();
????????$year = $mon = 0;
????????while ( $the_query->have_posts() ) : $the_query->the_post();
????????????$post_year = get_the_time('Y');
????????????$post_mon = get_the_time('m');
????????????$post_day = get_the_time('d');
????????????if ($year != $post_year) $year = $post_year;
????????????if ($mon != $post_mon) $mon = $post_mon;
????????????$posts_rebuild[$year][$mon][] = '<li>'. get_the_time('d日: ') .'<a href="'. get_permalink() .'">'. get_the_title() .'</a> <em>('. get_comments_number('0', '1', '%') .')</em></li>';
????????endwhile;
????????wp_reset_postdata();
????????foreach ($posts_rebuild as $key_y => $y) {
????????????$output .= '<h3 class="al_year">'. $key_y .' 年</h3><ul class="al_mon_list">'; //輸出年份

PS: 因為查詢度有點大,所以有加數據庫緩存,只在文章發表/修改時才會更新緩存數據,所以測試時,可以特意去后臺點“快速編輯”文章然后點更新就可以更新緩存數據。
2. 復制一份主題的 page.php 更名為 archives.php,然后在最頂端加入:

1
2
3
4
5
<?php
/*
Template Name: Archives
*/
?>

在 archives.php 找到類似 ,在其下面加入如下代碼

1
<?php zww_archives_list(); ?>

然后新建頁面(如叫:歸檔),選擇模版為 Archives
3. 給主題加載 jQuery 庫,沒有加載的,把下面這句扔到 functions.php 里面就行了。

1
wp_enqueue_script('jquery');

4. jQuery 代碼:
這次玩了逐個下拉/收縮效果,想著很好,但我博客感覺效果一般,因為文章太多了…如果文章不多,可以把代碼里面 2 個 (s-10<1)?0:s-10 改為 s ,效果會好看點。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(function ($, window) {
????$(function() {
????????var $a = $('#archives'),
????????????$m = $('.al_mon', $a),
????????????$l = $('.al_post_list', $a),
????????????$l_f = $('.al_post_list:first', $a);
????????$l.hide();
????????$l_f.show();
????????$m.css('cursor', 's-resize').on('click', function(){
????????????$(this).next().slideToggle(400);
????????});
????????var animate = function(index, status, s) {
????????????if (index > $l.length) {
????????????????return;
????????????}
????????????if (status == 'up') {
????????????????$l.eq(index).slideUp(s, function() {
????????????????????animate(index+1, status, (s-10<1)?0:s-10);
????????????????});
????????????} else {
????????????????$l.eq(index).slideDown(s, function() {
????????????????????animate(index+1, status, (s-10<1)?0:s-10);
????????????????});
????????????}
????????};
????????$('#al_expand_collapse').on('click', function(e){
????????????e.preventDefault();
????????????if ( $(this).data('s') ) {
????????????????$(this).data('s', '');
????????????????animate(0, 'up', 100);
????????????} else {
????????????????$(this).data('s', 1);
????????????????animate(0, 'down', 100);
????????????}
????????});
????});
})(jQuery, window);

PS:不知道怎么寫 js 文件然后調用的朋友就直接打開 header.php 并找到 ,在其下面加上

1
<script type="text/javascript">上面那段 jQuery 代碼</script>

因為是放在主題的 the_content() 下面,所以會默認使用主題寫好的 h3 ul li 格式,如果要更加有特色,那么就要自己去修改 css 了
4. css根據需要寫,不寫也可以的。HTML結構:

1
2
3
4
5
6
7
8
9
10
11
<div id="archives">
?????<p>[<a id="al_expand_collapse" href="#">全部展開/收縮</a>] <em>(注: 點擊月份可以展開)</em></p>
?????<h3 class="al_year">'年份</h3>
?????<ul class="al_mon_list">
?????????<li><span class="al_mon">月份<em> (本月文章數量)</em></span>
?????????????<ul class="al_post_list">
?????????????????<li>號數: <a href="文章鏈接">文章標題</a> <em>(評論數量)</em></li>
?????????????</ul>
?????????</li>
?????</ul>
?</div>

上面是原文,現在我來說說我的總結補充和修改:
1.首先說說上面有些不詳細的步驟:
(1):第二步:原文說的復制page.php更名為 archives.php意 思就是先進入cpanel面板里面把page.php這個頁面先下載下來(路徑一般是public_html/wp-content/themes/【你 主題的名字】這個目錄中),然后重命名為archives.php,然后不要修改直接上傳到cpanel面板和page.php頁面相同的目錄中,(之所 以說不要修改直接上傳到cpanel面板中再修改是因為涉及到UTF-8的編碼問題,為了避免出錯就上傳后再修改),然后按照原文所說的修改。
(2):第二步:原文說的新建頁面(如叫:歸檔),選擇模版為 Archives意 思就是在你上傳了archives.php并修改好之后,在WordPress后臺中去新建一個頁面,然后在新建的時候在右邊選項中選擇模板為 Archives,然后內容不需要填寫,可以修改一下固定鏈接讓其好看一點,比如我的固定鏈接是http://www.shenjieblog.com /archives,如圖:

(3):第四步:原文作者其實沒有給出作者自己的CSS效果代碼,但是我谷歌到了一篇文章中給出了原文作者的那種CSS效果,然后之后我直接把那些CSS 代碼復制到了我的style.css文件最下面,但是出現了兩個問題:一是歸檔頁面最上面的“全部展開/收縮”按鈕看不見了,想了好久,沒想出原因,后來 打開審查元素,發現其實那個其實還在,只是因為和我的主題有一些沖突,其實說白了就是位置錯位了,

于是我刪除了兩行代碼就解決了;還有一個問題就是可能也是因為我主題的自帶的ul標簽效果和我現在設置的有沖突,導致我ul前面的小方塊沒有去掉,于是我 有手動添加了一行代碼解決了。然后后來我發現字體太小了,顏色也不好看,我后來又在陽光盒子中看見他的歸檔頁面就是我想要的效果,就是本文最上面的圖片那 種效果,而且我和他使用的主題也都是一樣的,所以我就想說看看他的CSS是什么樣的,最開始的時候我不知道怎么查看他的那個CSS,我不可能通過審查元素 看,所以后來我想到了一個方法,直接把他的style.css文件下載下來,怎么下載呢?直接查看源代碼,他的源代碼很亂,

沒關系。我把他的代碼全部復制然后粘貼到Editplus中,你也可以用記事本,然后快捷鍵是ctrl+F,查找,輸入css然后查找,直到找到下面這 種字樣就代表這個是他使用的css樣式(一般都在最上面,很好找的),注意有時候不止一個,然后知道這個的大體位置之后就在源代碼中去查找,找到之后右 鍵,然后復制下載鏈接,復制到迅雷中去下載就可以把他的CSS文件下載下來,如果你像我一樣使用Editplus的話可以直接在Editplus中右鍵, 然后復制下載鏈接,

這個就是我下載下來的文件,

可以用記事本打開然后根據我上面寫的那個HTML結構查找相應的代碼,快捷鍵是ctrl+F,也就是輸入archives然后查找,

找到之后復制那些代碼到自己后臺的style.css文件的最后就可以了,然后可以根據自己的想法修改。
然后我現在我貼出我修改的代碼,修改的部分會有注釋,然后你們如果要用的話也可以自己修改一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#archives {
????position: relative;
????/*top: -60px;
????left: 150px;*//*原文這兩行代碼就是影響我最上面“全部展開/收縮”效果的,我刪除了這個*/
}
#archives h3 {
????margin-bottom: 0;
????padding: 0 15px;
????border-bottom: 1px solid #ddd;
????font-size: 20px;/*這個字體大小和下面的我都做了一些修改*/
????font-weight: 400;
????text-align: center;
????letter-spacing: 5px
}
#archives ul {
????list-style: none;
????margin: 0 30px;
????padding: 10px 0 20px 10px;
????border-left: 1px solid #ddd;
????font-size: 18px
}
#archives li {
????list-style: none;/*這一行代碼是我自己添加的,不加這個就會出現ul標簽前面的黑色小方塊,很難看*/
????position: relative;
????line-height: 30px
}
#archives ul ul {
????margin: -15px 0 0 0;
????padding: 15px 0 10px 0
}
#archives ul ul li {
????padding: 0 0 0 15px
}
#archives ul ul li:before {
????content: "";
????position: absolute;
????left: 0;
????top: 10px;
????border-top: 5px dashed transparent;
????border-bottom: 5px dashed transparent;
????border-left: 10px solid #ddd
}
#al_expand_collapse {
????display: inline-block;
????line-height: 24px;
????padding: 0 10px;
????color: #fff;
????font-size: 12px;
????text-decoration: none;
????background: linear-gradient(to bottom, #4caf50 20%, #388e3c 80%) repeat scroll 0 0 transparent;/*這個顏色和下面的我都做了一些修改*/
????background: -webkit-linear-gradient(to bottom, #4caf50 20%, #388e3c 80%) repeat scroll 0 0 transparent
}
#al_expand_collapse:hover {
????background: linear-gradient(to bottom, #388e3c 20%, #4caf50 80%) repeat scroll 0 0 transparent;
????background: -webkit-linear-gradient(to bottom, #388e3c 20%, #4caf50 80%) repeat scroll 0 0 transparent
}
#archives em {
????padding-left: 5px;
????font-size: 12px;
????color: #777
}
#archives .al_mon {
????padding-left: 5px;
????font-size: 14px;
????font-weight: 700
}
#archives .al_mon:after {
????content: "";
????position: absolute;
????left: -10px;
????top: 15px;
????width: 10px;
????height: 1px;
????background: #ddd
}
#archives .al_mon em {
????font-size: 12px;
????font-weight: 400
}

把上面這些代碼復制到自己WordPress外觀——菜單——編輯——style.css文件的最底部即可。然后刷新一下就可以了。
PS:注意如果刷新之后沒有效果的話可能是因為瀏覽器的緩存,關閉瀏覽器之后清除一下緩存再試就可以了,因為我遇到了這個問題,所以提醒一下大家。
原文網址:http://zww.me/wordpress-archive-page-template-wp-primary-function-2014-edition.z-turn
CSS代碼參考網址:http://www.erro.cn/archives/3856.html

?

轉載于:https://www.cnblogs.com/shenjieblog/p/5061237.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375255.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【web必知必會】—— 使用DOM完成屬性填充

本文介紹了使用DOM的簡單方法實現動態加載圖片的功能。 前文介紹了&#xff1a; 1 DOM四個常用的方法 首先看一下效果&#xff0c;初始時是一個相冊&#xff0c;可以點擊導航&#xff0c;切換圖片&#xff0c;并切換下方顯示內容&#xff1a; 點擊house&#xff0c;可以動態的切…

地址總線 數據總線

地址總線&#xff1a; CPU地址總線的寬度決定了它能尋址多少個內存單元地址,一個CPU有N根地址總線那么它的尋址能力為2^N次方。8086CPU地址總線寬度為20可尋址2^20次方個內存單元地址大小為1M。80386地址總線寬度為32可尋址內存為4GB 數據總線&#xff1a; CPU與存儲器之間的數…

Spring事務配置方式(一) 攔截器方式配置

一、使用<tx:advice>和<aop:config>配置事務 <!-- 配置事務管理器 --><bean id"transactionManager" class"org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name"dataSource" ref&qu…

8086寄存器組

寄存器(14個)|AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES| >通用寄存器 數據寄存器(存放一般數據)AX (AH,AL) | BX (BH,BL) | CX (CH,CL) | DX (DH,DL) 指針寄存器 堆棧指針 基址指針SP BP (SS:SP) 變址寄存器 源地址 目的地址SI …

學習動態性能表(10)--v$session_longops

學習動態性能表 第十篇--V$SESSION_LONGOPS 2007.6.7 本視圖顯示運行超過6秒的操作的狀態。包括備份&#xff0c;恢復&#xff0c;統計信息收集&#xff0c;查詢等等。 要監控查詢執行進展狀況&#xff0c;你必須使用cost-based優化方式&#xff0c;并且&#xff1a; 設置TIME…

存儲器

存儲器以字節為單位存儲信息,一個存儲單元存儲一個字節。一個字需要用兩個連續的存儲單元。 每一個存儲單元有唯一的地址&#xff0c;稱為存儲單元地址。

JDBC常用API小結

建立數據庫鏈接的三種方式&#xff1a; package com.victor_01;import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties;import org.junit.Test;public class Test1 {private String…

學習動態性能表(12)--v$db_object_cache

學習動態性能表 第12篇--V$DB_OBJECT_CACHE 2007.6.4 本視圖提供對象在library cache(shared pool)中對象統計&#xff0c;提供比v$librarycache更多的細節&#xff0c;并且常用于找出shared pool中的活動對象。 v$db_object_cache中的常用列&#xff1a; OWNER&#xff1a;對…

Java Platform Standard Edition 8 Documentation

下面這個圖挺有用的&#xff0c;收藏一下。Oracle has two products that implement Java Platform Standard Edition (Java SE) 8: Java SE Development Kit (JDK) 8 and Java SE Runtime Environment (JRE) 8.JDK 8 is a superset of JRE 8, and contains everything that is…

清除端口占用的程序

程序啟動的過程中&#xff0c;有時候會提示“端口被占用”。如何快速的找到占用該端口的進程&#xff1f;網上有很多種方法&#xff0c;這里自己整理了下&#xff0c;使用DOS命令查詢端口并清除端口占用的程序&#xff0c;做個筆記。 windows系統下DOS命令&#xff1a; 1.查看端…

Python進階06 循環對象

Python進階06 循環對象 作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01; 這一講的主要目的是為了大家在讀Python程序的時候對循環對象有一個基本概念。 循環對象的并不是隨著Python的誕生就存在的…

使用 WordPress 主題制作的20個精美網頁

WordPress 是一款個人博客系統&#xff0c;并逐步演化成一款內容管理系統軟件&#xff0c;它是使用 PHP 語言和 MySQL 數據庫開發的。用戶可以在支持 PHP 和 MySQL 數據庫的服務器上使用自己的博客。這里給大家分享使用 WordPress 主題制作的20個精美網頁。 您可能感興趣的相關…

內存地址空間

一個存儲器(內存)被劃分為若干個存儲單元,一個存儲單元可存儲一個字節(Byte) CPU可尋址到多少個存儲單元即這些存儲單元就是CPU的內存地址空間 如8086CPU有20根地址線可尋址1M的存儲單元,那么這個1M個可尋址到的存儲單元就構成這個CPU的內存地址空間 而實際的存儲器可以是RA…

關于監聽與控制設備旋轉全解析(UIDeviceOrientationDidChangeNotification)

一類情況&#xff1a; 初始化app的方向&#xff0c;比如只支持橫屏或者豎屏。下面舉例只支持豎屏的案例 在app的屬性里面手動設置 上面標注了該app支持的方向種類&#xff0c;要是在app里支持Portrait方向&#xff0c;還需要添加以下代碼 二類情況&#xff1a; 上面的代碼表明a…

標志寄存器FLAG

FLAG標志寄存器按位操作&#xff0c;FLAG是16位寄存器&#xff0c;第0位為CF標志第2位為PF標志... 如圖(FLAG各標志位以及在DEBUG中對應的顯示)&#xff1a;

PHP 性能分析: Xhprof Xhgui

PHP 性能分析: Xhprof & Xhgui 轉載于:https://www.cnblogs.com/joshua317/articles/5072859.html

powerdesigner低版本打開高版本方式為只讀導致無法保存PD只讀read-only-mode

由于版本號不一致 打開PD文件后提示&#xff1a; 點擊【確定】后打開&#xff0c;點擊【取消】后打不開 但打開后修改完畢保存提示&#xff1a; 解決辦法&#xff1a; pdm文件實際上是個xml文件&#xff0c;直接用文本編輯器打開該文件修改版本號即可 把根節點最后的版本號改成…

字符串加解密

題目描述 題目描述 1、對輸入的字符串進行加解密&#xff0c;并輸出。 2加密方法為&#xff1a; 當內容是英文字母時則用該英文字母的后一個字母替換&#xff0c;同時字母變換大小寫,如字母a時則替換為B&#xff1b;字母Z時則替換為a&#xff1b; 當內容是數字時則把該數字加1&…

Win32 一個helloworld對話框

.386.model flat,stdcalloption casemap:none include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib.data ;數據段titleS db helloworld,0 messageS db hello,welcome to win32,0.code ;代碼段start: invoke Messa…

Python補充06 Python之道

Python補充06 Python之道 作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01; Python有一個彩蛋&#xff0c;用下面語句調出&#xff1a; import this 該彩蛋的文檔記錄于PEP 20。 語句執行之后&…