Smart Archives 增强

安装了 Justin Blanton 开发的 smart archives 插件, 发现这个插件对中文和韩文支持不佳。我给做了点小修改,并且对他的一些小缺陷也进行了补正。最后的效果请看 http://www.doyj.com/archives/。

安装方法如下:
  1. 将下面的代码拷贝并存成文件smartarchives.php
  2. 将smartarchives.php 上载到你的plugin目录
  3. 到控制面板激活Smart Archives 插件
  4. 在适当的地方插入smartArchives()函数调用。
    这个函数有两个参数,第一个在”both”, “block”,”list”中选择,默认为both 第二个是要排除的分类id.
下面就是修改后的代码:

<?php
/*
Plugin Name: Smart Archives
Version: 1.5
Plugin URI: http://justinblanton.com/projects/smartarchives/
Description: A simple, clean, and future-proof way to present your archives.
Author: Justin Blanton
Author URI: http://justinblanton.com
*/

function smartArchives($format='both', $catID='') {

global $tableposts, $wpdb, $PHP_SELF , $month ;
setlocale(LC_ALL,WPLANG); // set localization language
// set the URI of your archives; this might not need to be changed (currently, it's http://yoursite.com/archives/)
$now = gmdate('Y-m-d H:i:s'); // get the current GMT date

if (($format == 'both') || ($format == 'block')) { // check to see if we are supposed to display the block
$qy = mysql_query("SELECT distinct year(post_date) as year, post_status
FROM $tableposts
WHERE post_status='publish'
AND post_date <= NOW()
ORDER BY year desc");
// loop to create the small archive block with year/month links
while($years = mysql_fetch_array($qy)) {
echo('‘.$years[year].’: ‘);
$qm = mysql_query(“SELECT distinct month(post_date) as monthv
FROM $tableposts
ORDER BY monthv asc”) or die(mysql_error());

for ($i=1; $i<=12; $i++)
{
$q = mysql_query("SELECT *, year(post_date) as year
FROM $tableposts
WHERE year(post_date)='$years[year]'
AND month(post_date)='$i'
AND post_status='publish'
AND post_date <= NOW()
ORDER BY id desc") or die(mysql_error());
$sm = $month[zeroise($i,2)]; // get the shortened month name; strtotime() localizes

if(mysql_num_rows($q))
{ echo('‘.$sm.’ ‘); }
else
{ echo(‘‘.$sm.’ ‘); }
}

echo(‘
‘);
}
echo (‘

‘);
}

if (($format == ‘both’) || ($format == ‘list’)) { //check to see if we are supposed to display the list
$qy = mysql_query(“SELECT distinct year(post_date) as year, post_status
FROM $tableposts
WHERE post_status=’publish’
AND post_date <= NOW()
ORDER BY year desc");
// loop to display links to all posts, sorted by descending month and day
while($years = mysql_fetch_array($qy)) {
$qm = mysql_query("SELECT distinct month(post_date) as monthv FROM $tableposts ORDER BY monthv desc") or die(mysql_error());
while($date = mysql_fetch_array($qm)) {
$q = mysql_query("SELECT *, year(post_date) as year, month(post_date) as monthv
FROM $tableposts WHERE year(post_date)='$years[year]'
AND month(post_date)='$date[monthv]'
AND post_status='publish'
AND post_date <= NOW()
ORDER BY id desc") or die(mysql_error());
if(mysql_num_rows($q)) {
$lm = $month[zeroise($date[monthv],2)]; // get the full month name; strtotime() localizes
echo('

‘.$lm.’ ‘.$years[year].’

‘);
echo(‘

    ‘);
    $q = mysql_query(“SELECT *, year(post_date) as year, month(post_date) as monthv
    FROM $tableposts WHERE year(post_date)=’$years[year]’
    AND month(post_date)=’$date[monthv]’
    AND post_status=’publish’
    ORDER BY post_date desc”) or die(mysql_error());
    while($post = mysql_fetch_array($q)) {
    if ($post[post_date_gmt] get_col(“SELECT category_id FROM $wpdb->post2cat WHERE post_id = $post[ID]”);
    $found=false;
    foreach ($cats as $cat) { // look to see if the specified category is attached to the current post
    if ($cat == $catID) $found=true;
    }
    if (!$found) echo(‘

  • ‘.$post[post_title].’
  • ‘);
    }
    else echo(‘

  • ‘.$post[post_title].’
  • ‘);
    }
    }
    echo (‘

‘);
}
}
}
}
}
?>

《Smart Archives 增强》上有5条评论

  1. 不错,不错,修复了乱码问题,但我复制的时候把前面的序号也复制进来了,还要一个一个的删。建议把前面的序号去掉。

  2. 发现一个问题,我不能用win live writer发布日志,试了半天之后才明白,是因为这个插件造成的故障,通用smart archive之后live writer一切正常。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注