..start..fly..

扫一扫
Guestbook

Home / PHP & Wordpress / 非插件实现WordPress归档页面

<< 清明时节清明雨给力2011,网站手机版本预览 >>

因为之前一直使用Dagon Design Sitemap Generator插件来实现存档页面,实现的具体方式可以参考https://www.sky.gs/websites/phpwordpress/wordpress-dagon-design-sitemap-generator.html,但是始终是多了个插件,而且加载速度不佳,以前归档页面截图如下:
以前的简洁版
现在的截图如下:
现在的简洁版
具体实现方式也不麻烦的:
一、将以下的一段代码添加到function.php里
  1. function archives_list_SHe() {
  2. global $wpdb,$month;
  3. $lastpost = $wpdb->get_var(“SELECT ID FROM $wpdb->posts WHERE post_date <‘” . current_time(‘mysql’) . “‘ AND post_status=’publish’ AND post_type=’post’ AND post_password=” ORDER BY post_date DESC LIMIT 1″);
  4. $output = get_option(‘SHe_archives_’.$lastpost);
  5. if(empty($output)){
  6. $output = ;
  7. $wpdb->query(“DELETE FROM $wpdb->options WHERE option_name LIKE ‘SHe_archives_%'”);
  8. $q = “SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, count(ID) as posts FROM $wpdb->posts p WHERE post_date <‘” . current_time(‘mysql’) . “‘ AND post_status=’publish’ AND post_type=’post’ AND post_password=” GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC”;
  9. $monthresults = $wpdb->get_results($q);
  10. if ($monthresults) {
  11. foreach ($monthresults as $monthresult) {
  12. $thismonth    = zeroise($monthresult->month, 2);
  13. $thisyear    = $monthresult->year;
  14. $q = “SELECT ID, post_date, post_title, comment_count FROM $wpdb->posts p WHERE post_date LIKE ‘$thisyear-$thismonth-%’ AND post_date AND post_status=’publish’ AND post_type=’post’ AND post_password=” ORDER BY post_date DESC”;
  15. $postresults = $wpdb->get_results($q);
  16. if ($postresults) {
  17. $text = sprintf(‘%s %d’, $month[zeroise($monthresult->month,2)], $monthresult->year);
  18. $postcount = count($postresults);
  19. $output .= ‘<ul class=“archives-list”><li><span class=“archives-yearmonth”>’ . $text . ‘ &nbsp;(‘ . count($postresults) . ‘&nbsp;’ . __(‘篇文章’,’freephp’) . ‘)</span><ul class=“archives-monthlisting”>’ . “\n”;
  20. foreach ($postresults as $postresult) {
  21. if ($postresult->post_date != ‘00000000 00:00:00‘) {
  22. $url = get_permalink($postresult->ID);
  23. $arc_title    = $postresult->post_title;
  24. if ($arc_title)
  25. $text = wptexturize(strip_tags($arc_title));
  26. else
  27. $text = $postresult->ID;
  28. $title_text = __(‘View this post’,’freephp’) . ‘, &quot;’ . wp_specialchars($text, 1) . ‘&quot;’;
  29. $output .= ‘<li>’ . mysql2date(‘d日’, $postresult->post_date) . ‘:&nbsp;’ . “<a href=’$url’ title=’$title_text’>$text</a>”;
  30. $output .= ‘&nbsp;(‘ . $postresult->comment_count . ‘)’;
  31. $output .= ‘</li>’ . “\n”;
  32. }
  33. }
  34. }
  35. $output .= ‘</ul></li></ul>’ . “\n”;
  36. }
  37. update_option(‘SHe_archives_’.$lastpost,$output);
  38. }else{
  39. $output = ‘<div class=“errorbox”>’. __(‘Sorry, no posts matched your criteria.’,’freephp’) .'</div>’ . “\n”;
  40. }
  41. }
  42. echo $output;
  43. }
二、建立归档模板,复制主题的single.php文件,重命名为archive.php后上传到主题文件夹中,在这个上传的archive.php的头部中添加以下代码:
  1. <?php
  2. /*
  3. Template Name: archives
  4. */
  5. ?>
三、在上传的archive.php中找到以下代码
  1. <?php content(); ?>
在其下边添加如下代码:
  1. <a id=“expand_collapse” href=“#”>全部展开/收缩</a>
  2. <div id=“archives”><?php archives_list_SHe(); ?></div>
四、新建一个页面文件,选择“模板”里选择“Archive”即可
五、在主题的style.css中定义显示样式,可以参考这段或是自己编写都是可以的:
  1. #archives ul li a{font:14px/2em ‘Microsoft Yahei’,Tahoma;color:#85330C}
  2. #expand_collapse,.archives-yearmonth { cursor:pointer;font:bold 14px/2em ‘Microsoft Yahei’,Tahoma;}
六、为了实现展开和折叠效果,加载js库后添加如下的代码:
  1. /* 存档页面 jQ伸缩 */
  2. $(‘#expand_collapse,.archives-yearmonth’).css({cursor:“s-resize”});
  3. $(‘#archives ul li ul.archives-monthlisting’).hide();
  4. $(‘#archives ul li ul.archives-monthlisting:first’).show();
  5. $(‘#archives ul li span.archives-yearmonth’).click(function(){$(this).next().slideToggle(‘fast’);return false;});
  6. //以下下是全局的操作
  7. $(‘#expand_collapse’).toggle(
  8. function(){
  9. $(‘#archives ul li ul.archives-monthlisting’).slideDown(‘fast’);
  10. },
  11. function(){
  12. $(‘#archives ul li ul.archives-monthlisting’).slideUp(‘fast’);
  13. });
或是直接在主题的head.php中找到<?php wp_head(); ?>,在其底下加入这段代码:
  1. <script type=“text/javascript”>
  2. jQuery(document).ready(
  3. function($){
  4. $(‘#expand_collapse,.archives-yearmonth’).css({cursor:“s-resize”});
  5. $(‘#archives ul li ul.archives-monthlisting’).hide();
  6. $(‘#archives ul li ul.archives-monthlisting:first’).show();
  7. $(‘#archives ul li span.archives-yearmonth’).click(function(){$(this).next().slideToggle(‘fast’);return false;});
  8. $(‘#expand_collapse’).toggle(
  9. function(){
  10. $(‘#archives ul li ul.archives-monthlisting’).slideDown(‘fast’);
  11. },
  12. function(){
  13. $(‘#archives ul li ul.archives-monthlisting’).slideUp(‘fast’);
  14. });
  15. });
  16. </script>

Postscript:

总的来说这个方法还是蛮不错的,值得推荐 :roll:

Related Posts

转载原创文章请注明,转载自:SKY..fly..[www.sky.gs]

本文链接: https://www.sky.gs/websites/phpwordpress/non-plugins-wordpress-archives-page.html

QR:  非插件实现WordPress归档页面

3 Responses to “非插件实现WordPress归档页面”

  1. figo says:

    :mrgreen: :mrgreen: 为什么最近把代码粘贴到function.php里一运行就出错啊 :cry: :cry:
    2011年11月23日 星期三 18:11:53

  2. Another wonderful way to optimize your blog! Thanks man! I’m also a fan of DD Sitemap.

  3. Znotz says:

    抢到沙发了…博主总有些新东西..学习了 :arrow:

Leave a Reply

Code (☆)5+10=?


Websites powered by Wordpress5.7 Copyright © 2009-2021 - All Rights Reserved   SKY..fly..