Archive for the ‘原创技术文章’ Category

wordpress如何显示和分类相关的热门文章

十二月 3rd, 2008

Popularity Contest是个不错的插件,可以根据点击量,评价次数,trackbacks等计算一个文章的受欢迎程度,然后列出来。为了跟用户当前浏览的页面相关性更好,我做了一些修改。
这个插件有2个function可用
akpc_most_popular_in_cat和akpc_most_popular,分别是指定一个分类id或取当前分类和所有的排名。
但是akpc_most_popular_in_cat有一点问题,就是原来的sql语句是在show_top_ranked_in_cat里面的sql是
WHERE tt.term_id = ‘”.intval($cat_ID).”‘
这样,只能在一个分类里面查找,需要修改成支持多个分类id的。改成如下
WHERE tt.term_id in (“.$cat_ID.”)
这样就支持多个分类id了,还有一个问题是取的当前的相关分类id,我们已经解决了。在sidebar.php里面加入如下代码,即可。根据不同的theme,可能需要做些调整。

<li id="hot-article" class="sb1">
<h2 class="widgettitle">热门文章</h2><ul class="pop">
    
<?php if ( function_exists('akpc_most_popular') ) : ?>
    
<?php if (is_category()) {
        
//echo $cat;
        
$categoriesget_categories('child_of='.$cat);
        
$categoryIDS = array($cat);
        
foreach ($categories as $category) {
            
array_push($categoryIDS, $category->term_id);
        
}
 
        
$categoryIDS = implode(",", $categoryIDS);
        
akpc_most_popular_in_cat(10, "<li>", "</li>", $categoryIDS) ;
    
}else if ( is_single()){
        
$categories = get_the_category();
        
$categoryIDS = array();
        
foreach ($categories as $category) {
            
array_push($categoryIDS, $category->term_id);
        
}
        
$categoryIDS = implode(",", $categoryIDS);
        
akpc_most_popular_in_cat(10, "<li>", "</li>", $categoryIDS) ;
    
}else{
        
?>
        
<?php akpc_most_popular($limit=10); ?>
    
<?php }
endif; ?></ul>
</li>

Popularity: 39%

wordpress如何取得当前的分类id

十二月 1st, 2008

wordpress的很多sidebar展示内容都是静态的,比如最新评论,最新文章等。不管首页,分类,还是单页都是一样的。原来写过一篇如何显示wordpress当前分类的文章列表?,这是针对single page的。其实还可以在分类页面做一些工作。
单个的文章页面很简单就用
get_the_category
返回的是一个对象的数组,因为一个文章可能属于多个分类。
分类页面简单的可以直接用
$cat
这个变量,但是这样其实是不完美的,因为当前分类还可以有子分类,怎么拿当前分类的所有子分类id呢?用
get_categories(‘child_of=’.$cat);

下一篇贴一个把分类相关的热门文章列在侧边栏的代码。

Popularity: 41%

wordpress 2.6.5更新文件列表

十一月 26th, 2008

共更新了6个文件,替换掉,ok

\wp-admin\users.php
\wp-content\plugins\akismet\akismet.php
\wp-includes\feed.php
\wp-includes\post.php
\wp-includes\version.php
\xmlrpc.php

Popularity: 28%

wordpress simple tags标签自动链接无效的解决

十一月 21st, 2008

随着wordpress自带了tag功能后,伴随了俺很久的Ultimate Tag Warrior 3也完成了他的历史使命,光荣退休了。
虽然有了这个功能,但是功能比较弱,后来发现了simple tags这个插件,功能强大的忒多了。批量管理、修改啥的都有了。今天说的是其中一个在日志内容中自动加入标签链接的功能,即:我这里已经有了一个“WordPress”标签,并且日志含有短语“WordPress”,该功能将把“WordPress”短语替换成“WordPress”的标签页链接(http://www.juyimeng.com/tag/wordpress/)。
这个功能我后台打开后,发现不能用。因为有原来前面修改Blog Mechanics Keyword Link的经验,所以就顺藤摸瓜,找到了
simple-tags/2.5/simple-tags.client.php文件,在大约第265行。将

$match = "/\b" . preg_quote($term_name, "/") . "\b/".$case;

换成

$match = "/" . preg_quote($term_name, "/") . "/".$case;

问题解决。原因一样。老外作的东西,没考虑中文,他们的word之间会有空格我们没有,所以,把\b去掉,即可。
但是会出现吧关键字“word”,遇到wordpress中的前4个字母也替换掉的情况。
莫非要区分中英文对待?那么就要用2个正则,而且可能中英文混合。那就麻烦大了。
先用着再说吧。:D

Popularity: 39%

wordpress开启cache后的一些问题

十一月 11th, 2008

继上篇如何使wordpress 2.6.X启用缓存加速开启word2.6.3的cache后,速度感觉有所提高。但是出现了一些问题。
一个是如果关闭cache,则会出现了

WordPress database error: [Table 'wp.wp_categories' doesn't exist]
SELECT * FROM wp_categories
?>

的报错信息。查了一下,是因为版本不兼容的问题,用的是老版的cache.php,里面有一个取分类的功能。原来有XXcategories这个表的。没办法
找到

if ($dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories"))

替换成

if (1<0 && $dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories"))

让这一句不执行就没错误,也可以正常显示了。
最好的办法应该是找到其他的版本,或者修正这句话。。。等空下来再说。//TODO

另外一个问题是开了cache后,评轮的次数也会缓存,就是后台你审核或者删除评论,次数不变。要等缓存清除后才能正确显示,偶的解决方法比较野蛮:
找到

wp_update_comment_count($comment->comment_post_ID);

大概是在787 行,在return前增加一句wp_cache_flush();即可。
应该也有更优雅的方法,比如搞个插件啥的。。可是偶现在不会。。

Popularity: 31%

python的settimeout

十一月 9th, 2008

有时候写python关于网络的程序。比如用urllib2等module发http请求的时候,发现有时候会有死掉的情况,就是程序没任何反应,也不是cpu,内存没资源的问题。具体情况还没搞明白那里出的问题,但是找到一个解决办法。就是设置socket time out,即:如果一个请求超过一定的时间没有完成,就终止,再次发起请求。
这个是从2.3有的功能用法如下:
settimeout( value)
Set a timeout on blocking socket operations. The value argument can be a nonnegative float expressing seconds, or None. If a float is given, subsequent socket operations will raise an timeout exception if the timeout period value has elapsed before the operation has completed. Setting a timeout of None disables timeouts on socket operations. s.settimeout(0.0) is equivalent to s.setblocking(0); s.settimeout(None) is equivalent to s.setblocking(1). New in version 2.3.

就是settimeout()里面填一个数值。小心别太小,别正常的请求也不能完成。

Popularity: 34%

如何使wordpress 2.6.X启用缓存加速

十一月 8th, 2008

一直觉得wordpress的性能不好。打开它自己的查询次数和花费时间统计,一个首页有44的查询,一个单文章页面有52次查询。上边这些数字可能跟我装的一些插件或者增加的功能有关。网上说可以开启自带的cache缓存功能。
define(‘ENABLE_CACHE’, TRUE);
在2.6.3版本却不行,google了半天的,检查了半天的文件夹属性,还是不行。于是换了一个用老wordpress的网站,用的是2.1.3,打开后却马上可以了。百思不得其解。又是检查了半天。直到最后要放弃了,把2个wp-include/cache.php文件都拿下来做对比,发现区别很大。把老的cache.php替换到2.6.3上,马上就可以了。原来
wp 2.6.3的cache.php 和 2.1.3不一样,启用后,效果还可以。首页的查询从44次数降到了11,单个文章页面,从52减少到了15次。总体花费的时间变化倒不是很大。但是心理感觉还是不错的。

开启后有2个问题,一个是未审核留言的数字,被缓存了。还有一个是换了cache.php文件后,如果关闭缓存,会在头部有一个抱错信息。说是SELECT * FROM wp_categories 。这个表不存在。

下篇再说怎么解决。

Popularity: 32%

不让Most Commented显示页面的评论

十一月 7th, 2008

wordpress的Most Commented插件不错,可以显示现在评论最多的文章和页面。
但是有个问题,有些网站的留言本和某些页面也是可以留言的,那么留言最多的就肯定是这些个页面了。于是想去掉页面(page)的评论,只要文章的。
修改很简单找到

if (!$show_pass_post) $request .= " AND post_password =''";

在后边,添加

$request .= " AND post_type  !='page' ";

即可。
测试成功。

Popularity: 53%

如何显示wordpress当前分类的文章列表?

十一月 4th, 2008

wordpress单个文章页面的侧边栏如果还是显示和首页,分类页面一样的文章就没什么意思了。下面的代码是显示文章所属分类的文章列表,这样可以让访问者可以方便查看相关文章。回头再改改,看看能不能在分类页面上显示最受欢迎的文章。
添加下列代码在合时的位置即可

<?php
/*
single page?show current category articles
*/

?>
<?php
if ( is_single() ) :
global $post;
$categories = get_the_category();
foreach ($categories as $category) :
    
?>
    <li class="widget widget_recent_entries" id="
<?php $category->term_id;?>-posts">
        <h2 class="widgettitle">
<?php echo $category->name; ?></h2>
        <ul>
        
<?php
        
$posts = get_posts('numberposts=5&category='. $category->term_id);
        
foreach($posts as $post) :
        
?>
            <li>
            <a href="
<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
        
<?php endforeach; ?>
        </ul>
    </li>
<?php
endforeach; endif ; ?>
<?php
/*
end show current category articles
*/

?>

Popularity: 34%

wordpress 2.6.2 提交留言页面出错

十月 25th, 2008

这几天在用wordpress 2.6.2搞一个网站,发现提交空的留言,或者邮件格式不合法等情况的时候会出现改页无法显示。用httpwatch看,发现内容是对的,提示留言内容是必填的,但是http的头却是500。于是浏览器返回了改页无法显示的错误页面。
跟踪了一下,原来在
wp-includes/functions.php
这个文件的wp_die函数,在大约第1764
function wp_die( $message, $title = ” )
有一句status_header( 500 );
大约在1800行,注释掉这一行就可以了。

问题解决了,不知道为啥程序这么写,给500,期待高人指点。

Popularity: 18%