WordPress中用Ctrl+Enter提交留言

由于某些软件和论坛的缘故,很多时候冰古blog上写完留言回复后,都习惯性地按下Ctrl+Enter进行提交留言,但基本上是不成功的,很多blog程序都没有加入这样的快捷键

Discuz等论坛都可以使用快捷键提交发贴和发贴,但因为觉得它们的代码太麻烦,所以一直没有去查找该快捷键的方法。直到有次在百度知道回复时,按下Ctrl+Enter提交竟然成功了,才打开它的源代码查看了下。一看才知道,实现的方法很简单,只需几行javascript就能搞定了。那么我们也在WordPress加上这个快捷键吧:

一、打开模板中的comments.php文件,查找到下面的内容:

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform" name="commentform">
<?php if ( $user_ID ) : ?>

如果你的form标签中没有name=”commentform”属性,那么请加上。
二、再往下拉一点,你可以看到类似的两行:

<p><textarea name="comment" id="comment" cols="55" rows="10" tabindex="4"></textarea></p>
<p><input type="submit" id="submit" tabindex="5" value="提交留言" /></p>

如果textarea标签上没有id属性,请按照上面的内容加上。如果在第二行中发现name=”submit”,将之删除。如果你发现还是不行,把id=”submit”改为id=”submitit”,这样肯定是可以了。
三、最后,在</form>的下面,添加下面的一段javascript代码后保存就行了。

<script type="text/javascript">
var commenttextarea = document.getElementById('comment');
commenttextarea.onKeyDown = quickSubmit(event);
function quickSubmit(event){
  if (event.ctrlKey && event.keyCode == 13){
    document.submitform.submit();
  }
}
</script>

貌似上面这句我搞错了document.submitform.submit();,顺便把代码兼容性弄好点,用上下面的代码,应该没问题了。

<script type="text/javascript">
var commenttextarea = document.getElementById('comment');
commenttextarea.onkeydown = function quickSubmit(e) {
  if (!e) var e = window.event;
  //alert(e.keyCode);
  if (e.ctrlKey && e.keyCode == 13){
    //alert('good');
    document.getElementById('commentform').submit();
  }
};
</script>

20090619新版本

<script type="text/javascript><!--//--><![CDATA[//><!--
    var commenttextarea = document.getElementById('comment');
    commenttextarea.onkeydown = function quickSubmit(e) {
        if (!e) var e = window.event;
        if (e.ctrlKey && e.keyCode == 13){
            document.getElementById('submit').click();
        }
    };
//--><!]]><script>

试试吧。

BTW:google换了favicon?google/谷歌 favicon

WordPress模板中的作者函数(Author tags)

除了最后两个函数,这些函数都需在The_Loop中使用,并没有相关的参数。

the_author 显示文章的作者

the_author_description 显示文章作者的描述(作者个人资料中的描述)

the_author_login 显示文章作者的登录名

the_author_firstname 显示文章作者的firstname(名)

the_author_lastname 显示文章作者的lastname(姓)

the_author_nickname 显示文章作者的昵称

the_author_ID 显示文章作者的ID号

the_author_email 显示文章作者的电子邮箱

the_author_url 显示文章作者的网站地址

the_author_link (添加于2.1版本) 显示一个以文章作者名为链接名,链接地址为文章作者的网址的链接。例如一个名叫冰古的作者,他的网站地址为http://bingu.net,则显示为冰古

the_author_icq (不推荐使用) 显示文章作者的icq

the_author_aim 显示文章作者的aim

the_author_yim 显示文章作者的yim

the_author_msn (不推荐使用) 显示文章作者的msn

the_author_posts 显示文章作者已发表文章的篇数

the_author_posts_link 显示一个链接到文章作者已发表文章列表的链接

list_authors (不推荐使用) 显示blog所有作者和他们的相关信息。完整函数如下:

<?php list_authors(optioncount, exclude_admin, show_fullname, hide_empty, 'feed', 'feed_image'); ?>

参数:
optioncount:是否显示各作者已发表文章的篇数,可选值为:TRUE 和 FALSE(默认值)
exclude_admin:是否不列出管理员,可选值为:TRUE(默认值) 和 FALSE
show_fullname :是否显示各作者的全名,可选值为:TRUE 和 FALSE(默认值)
hide_empty:是否不显示发表文章数为0的作者,可选值为:TRUE(默认值) 和 FALSE
feed:链接到各个作者发表文章的RSS供稿种子链接名,默认为空,不显示RSS供稿种子
feed_image:供稿种子的图片地址,如果提供此项,则覆盖上面的feed,默认为空
例如:

<?php list_authors(FALSE, FALSE, TRUE, FALSE); ?>

代表不显示各个作者的发布文章数,列出管理员,显示各作者的全名,显示发布文章数为0的作者和不显示RSS供稿种子。

wp_list_authors 显示blog作者列表,如果作者发表过文章,则他的名字将链接到他发表的文章列表中。可定义是否显示其他信息。
参数:
optioncount:是否显示各个作者发表文章数,可选值:true 和 false(默认值)
exclude_admin:是否不显示“admin”用户,可选值:true(默认值) 和 false
show_fullname:是否显示各个作者的全名,如果不显示,将显示昵称。可选值:true 和 false(默认值)
hide_empty:是否不显示发表文章数为0的作者,可选值:true(默认值) 和 false
feed:链接到各个作者发表文章的RSS供稿种子链接名,默认为空,不显示RSS供稿种子
feed_image:供稿种子的图片地址,如果提供此项,则覆盖上面的feed,默认为空
例如:

<?php wp_list_authors('show_fullname=1&optioncount=1'); ?>

代表显示全名和显示各个作者的发表文章数,其他都为默认值。

加速wordpress的想法

是的,wordpress的确跑的不太快。最近在做这个模板的时候,顺便也产生了一些加速wordpress的想法。效果可能不太明显,但也能起到一定的作用吧。

plugin-hog-detector
从上图可以看到,在End Header中使用的时间几乎是90%。

wordpress-plugin-hog-detector
从这张中可以看到,End Header中花费的时间仍旧不少,但只能占到50%左右。而End Footer中占用了一大部分的时间。第一张图是本地没有使用插件时生成的,第二张是冰古blog使用了25个插件时生成的。由两张图片可以大致得出End Header和loop是wordpress默认任务使用的时间,而End Footer是插件花销的时间。

以上只是说明了一个几乎是众所周知的事实:wordpress真的跑不快,默认任务已经要大部分的时间来跑了,而插件是另一个让wordpress跑的慢的原因。

以下就是我加速wordpress的想法:
1. 不要定制性。怎样是不要定制性呢?打开你的wordpress,然后查看源代码,你可以看到类似这样的代码:

<!-- Added By Democracy Plugin. -->
<script type='text/javascript' src='http://bingu.net/wp-content/plugins/democracy/democracy.js'></script>
<link rel='stylesheet' href='http://bingu.net/wp-content/plugins/democracy/basic.css' type='text/css' />
<link rel='stylesheet' href='http://bingu.net/wp-content/plugins/democracy/style.css' type='text/css' />

这个是Democracy插件利用wp_head()添加的,你大可以将上面的代码直接复制到你的模板中(我这里是举例,你不会真的把上面的代码加到你的模板中吧 :lol: ),然后修改这个插件的代码,找到类似这样的代码:

add_action('wp_head', 'jal_add_js');

将它屏蔽掉:

//add_action('wp_head', 'jal_add_js');

打开模板的header.php,你看到的可能是这样的:

<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>

<head profile="http://gmpg.org/xfn/11">
	<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

	<title><?php bloginfo('name'); ?><?php wp_title(); ?></title>

	<style type="text/css" media="screen">
		@import url( <?php bloginfo('stylesheet_url'); ?> );
	</style>

	<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="<?php bloginfo('rss2_url'); ?>" />
	<link rel="alternate" type="text/xml" title="RSS .92" href="<?php bloginfo('rss_url'); ?>" />
	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="<?php bloginfo('atom_url'); ?>" />

	<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
	<?php wp_get_archives('type=monthly&format=link'); ?>
	<?php //comments_popup_script(); // off by default ?>
	<?php wp_head(); ?>
</head>

<body>
<div id="rap">
<h1 id="header"><a href="<?php bloginfo('url'); ?>/"><?php bloginfo('name'); ?></a></h1>

为什么不改成这样呢?

<html xmlns="http://www.w3.org/1999/xhtml">

<head profile="http://gmpg.org/xfn/11">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

	<title>你的blog名字<?php wp_title(); ?></title>

	<style type="text/css" media="screen">
		@import url( 'http://你的wordpress地址/wp-content/themes/你的模板名/style.css' );
	</style>

	<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://你的wordpress地址/wp-rss2.php" />
	<link rel="alternate" type="text/xml" title="RSS .92" href="http://你的wordpress地址/wp-rss.php" />
	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="http://你的wordpress地址/wp-feed.php" />

	<link rel="pingback" href="http://你的wordpress地址/xmlrpc.php" />
	<?php wp_head(); ?>
</head>

<body>
<div id="rap">
<h1 id="header"><a href="你的wordpress地址">你的blog名</a></h1>

关掉你的Widgets,直接修改模板文件。

上面都做了,你可能发现效果不是太明显,但还是能起一定的作用的。

2. 你可以看到除非你不使用插件,不关你怎么对wordpress进行优化其实都是杯水车薪,很难看到什么效果。其实最有效的方法,应该是压缩模板的html,css,js代码和对使用的图片进行优化。
你的顶部图片有20k大,如果你把它去掉后是什么概念,我相信这样的效果是很明显的。

当然这里说的方法可能有悖你的想法,牺牲可定制化来获得不太明显的加速,这的确有点可笑,不过这也是萝卜青菜啦。

让IImage Browser在Wordpress2.5中重生

iimage browser upload
毫无疑问,IImage Browser是冰古最爱的用于上传图片(或其他文件)到服务器的wordpress插件,冰古已多次推荐,这里这里。而2.5的图片上传有这样那样的毛病,更让冰古觉得这个插件很不错。

但原作者似乎已经放弃更新这个很不错的插件了,最近的更新要追溯到2007年的5月,支持版本也只能到2.0。这个插件有个很不好的地方,就是要将其中一个文件iimage-browser.php放到wp-admin文件夹中,进行升级wordpress等操作时,可能导致该文件丢失。如下hack就能使IImage Browser工作于wordpress2.5下,并把iimage-browser.php文件同时放到plugins文件夹中。

1. 下载IImage Browser
2. 将里面的两个文件解压缩到iimage-browser文件夹中;
3. 打开iimage-browser-plugin.php,找到

window.open("../wp-admin/iimage-browser.php", "IImageBrowser", "width=700,height=600,scrollbars=yes");

将其中的

../wp-admin/iimage-browser.php

直接改为

http://你的wordpress/wp-content/plugins/iimage-browser/iimage-browser.php

保存。
4. 打开iimage-browser.php,找到如下数行,

if (file_exists('admin.php')) {
	require_once('../wp-config.php');
    require_once('admin.php');		// WP after 1.3 alpha-3
} else {
    require_once('admin-header.php');	// WP before 1.3 alpha-3
}

$ib_settings['real_path'] = './../wp-content/';

//URI of that directory relative to your blog installation URI
$ib_settings['real_url'] = '/wp-content';

改为:

if (file_exists('../../../wp-admin/admin.php')) {
	require_once('../../../wp-config.php');
    require_once(ABSPATH.'/wp-admin/admin.php');		// WP after 1.3 alpha-3
} else {
    require_once(ABSPATH.'/wp-admin/admin-header.php');	// WP before 1.3 alpha-3
}

$ib_settings['real_path'] = ABSPATH.'/wp-content/images/';//这里可以修改到你喜欢的路径

//URI of that directory relative to your blog installation URI
$ib_settings['real_url'] = '/wp-content/images';//这里也就同上啦

保存;
5. 将iimage-browser文件夹上传到plugins文件夹中;
6. 在后台激活就行啦。
iimage browser

对了,你要在HTML编辑区才能看到上面的按钮哦。

wordpress 2.5.1

2.5发布不到一个月,WordPress2.5.1就发布了。

如果你被2.5版本的一些小毛病烦到,你是应该更新的,因为它修正了七十余处的小毛病;
除此之外,此版本还补上了一个安全漏洞。如果你不关心上面的小毛病,你可以只下载下面几个文件覆盖你现在的WordPress对应的文件,也能补上这个安全漏洞。
wp-includes/pluggable.phpwp-admin/includes/media.phpwp-admin/media.php

重点修正的小毛病包括:
Dashboard页面、写文章页页面和编辑留言页面的执行效率的提升;
对分类的执行效率的提升;
多媒体上传的修正;
升级到TinyMCE 3.0.7;
小部件管理的修正;
可用性的提升;
IE下页面布局的修正。

完整的修正小毛病列表

官方blog还特地提到了昨天说到的小甜饼干的安全问题,这个也建议搞搞它。

最后是WordPress 2.5.1下载链接

让wordpress2.5的小甜饼干更安全

WordPress 2.5的wp-config.php中增加了一个常量SECRET_KEY,它使你的cookie能更好地抵御SQL注入或其他攻击。

如果你的wp-config.php是WordPress2.5版的,它应该有下列一段:

// Change SECRET_KEY to a unique phrase. You won’t have to remember it later,
// so make it long and complicated. You can visit https://www.grc.com/passwords.htm
// to get a phrase generated for you, or just make something up.
define('SECRET_KEY', '唯一字符串'); // Change this to a unique phrase

你需要做的只是把上面的“唯一字符串”改成你想要的字符串就行了。

如果你想我一样wp-config.php老旧不堪,你只需在其中加入下面一句,也就可以了(当然也要改那个字符串啦):

define('SECRET_KEY', '唯一字符串');

如果你对那个“唯一字符串”没有什么更好的想法,wordpress也为你想到了,访问api.wordpress.org/secret-key/1.0/,将之生成的覆盖上面的define语句。

提供个偶尔发现的小工具:

阅读:Cookie Security in WordPress 2.5

成功升级到wordpress 2.5

很平稳地从wordpress 2.3.3过渡到wordpress 2.5。
升级过程真的是毫无难度,如果这是你第一次升级wordpress,下面几个步骤可以去除你的升级恐惧感:
1.备份现在的wordpress程序文件和MySQL数据库;(备份是个好习惯)
1.0.1.进入wordpress管理面板的plugin选项中,将所有插件都停用了吧;
2.在你的ftp或在线文件管理器中选择wp-content文件夹.htaccess文件wp-config.php文件以及其他你认为需要保留的文件外的其他文件很文件夹,并将它们删除;
3.上传wordpress 2.5版到你的blog目录下;
4.运行http://你的blog的链接/upgrade.php
5.还有其他步骤吗? :mrgreen: 就是这些了!

如果你升级过程后发现有问题出现。请从插件查起!

wordpress 2.5的新版管理面板真的是很美很漂亮 :lol: 一键更新插件很好很强大(考虑是不是要装自动升级wordpress的插件)。

wordpress 2.5正式版发布

刚在抓虾wap看到的消息,wordpress 2.5正式版在一个小时前发布。

wordpress 2.5新特性在rc1发布时已说过,这里不再赘述。

期待的兄弟们下载更新你的wordpress吧!