不幸的事情总会发生,不知道哪个缺心眼的家伙竟然把我的域名搞到 Akismet 的黑名单了。这样的结果是灾难性,这样我到哪里留言都徽不成功了,直接被判断为垃圾留言,虽然我不太留言。 这个时候怎么办?办法总是有的。就是到 Akismet 的 Contact 页面联系他,告诉他你被 Akismet 误判了,能不能帮忙从黑名单中删除?因为对方是美国人,只能看得懂英文文,如果你英文不够好,你可以使用下面这段英文: My comments get caught by akismet by mistake. What can I do to make akismet identify my comments on others’ blogs as non-spams? 然后等上三四天,你就会收到对方的来信,告诉你他已经帮你从黑名单中删除,你测试下还有没有问题,有问题去再次联系他,回邮件就行了。 标签:Akismet SPAM
Wordpress教程
WordPress 技巧:删除孤立的 Post Meta 数据
WordPress 使用久了,有些 Post 删除了,但是其对应的 Post meta 数据还存在,那么怎么删除这些孤立的 Post Meta 数据呢?在数据库管理软件中直接运行下面的 SQL 语句: DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL 执行之前,要注意备份数据库,如果你的 WP 数据库的前缀不是 wp,也要相应的改成你 WP 数据库的前缀。 标签:WordPress 技巧
WordPress 技巧:把多说的 JavaScript 脚本移到底部
多说默认是在 Head 输出它的相关 JavaScript 脚本,但是有时候因为多说服务器不稳定的问题,会引起整个博客速度被拖累,另外按照 YSlow 或者 Google PageSpeed 等优化规则,最好也是要把 JavaScript 代码放到 Footer,下面就介绍下如何把多说的 JavaScript 脚本移到 Footer: <?php /* Plugin Name: 把多说的 JavaScript 脚本移到 footer Plugin URI: http://blog.wpjam.com/m/move-duoshuo-js-to-footer/ Description: 把多说的 JavaScript 脚本移到 footer Version: 0.1 Author: Denis */ add_action('init', 'move_duoshuo_js_to_footer'); function move_duoshuo_js_to_footer() { global $duoshuoPlugin; remove_action('wp_print_scripts', array($duoshuoPlugin, 'appendScripts')); add_action('wp_footer',array($duoshuoPlugin, 'appendScripts')); } ?> 将上面的复制到当前主题的 functions.php 文件,或者直接复制保存一个文件,上传到当前插件目录,激活即可。 标签:WordPress […]
Use Sinaapp Lib:使用新浪云计算 CDN 给 jQuery 加速
我前面介绍过 Google Hosted Libraries:它把一些常用的的 JavaScript 库放到 Google 的服务器上,这样就可以充分利用 Google 的服务器资源,节省自己的网络带宽。其实国内新浪云计算平台 Sinaapp 也提供了这些库:http://lib.sinaapp.com/。 为了方便 WordPress 博客使用,我就开发了对应的 WordPress 插件:Use Sinaapp Lib,把 WordPress 中的 JavaScript 库用 Sinaapp Lib 来替代,达到节省带宽和加速的目的。目前这个插件支持以下的库: jquery jquery-ui backbone underscore json2 swfobject 另外需要特别注意的是,这个插件使用的 jQuery 库是最新的 1.9 版本,会有一些兼容性的问题。 插件使用非常简单,只需要上传激活即可,原来使用 wp_enqueue_scripts 方式调用 jQuery 的插件无需做任何更改即可继续使用。 下载:use-sinaapp-lib.zip 标签:CDN WordPress 插件
如何从 Akismet 黑名单中逃生
不幸的事情总会发生,不知道哪个缺心眼的家伙竟然把我的域名搞到 Akismet 的黑名单了。这样的结果是灾难性,这样我到哪里留言都徽不成功了,直接被判断为垃圾留言,虽然我不太留言。 这个时候怎么办?办法总是有的。就是到 Akismet 的 Contact 页面联系他,告诉他你被 Akismet 误判了,能不能帮忙从黑名单中删除?因为对方是美国人,只能看得懂英文文,如果你英文不够好,你可以使用下面这段英文: My comments get caught by akismet by mistake. What can I do to make akismet identify my comments on others’ blogs as non-spams? 然后等上三四天,你就会收到对方的来信,告诉你他已经帮你从黑名单中删除,你测试下还有没有问题,有问题去再次联系他,回邮件就行了。 标签:Akismet SPAM
WordPress 技巧:社会化评论插件多说提速技巧
分享几个社会化评论插件多说的提速技巧:1. 不再查询 WordPress 原生的留言。 2. 不再加载 comment-reply.js,3.把多说的 JavaScript 脚本移到 footer。 不再查询 WordPress 原生的留言 我们知道使用多说这样的社会化评论服务之后,WordPress 本地的留言除了备份之外,其他已经没有什么作用了。但是安装了多说之后,WordPress 还是会去数据库查询当前日志的留言,这样的查询其实已经没有意义了,我们可以通过下面的代码屏蔽这次查询,达到提速的目的。 打开当前主题的 single.php 文件,把以下函数注释掉: comments_template(”, true); 然后添加下面的代码: require( $duoshuoPlugin->commentsTemplate('')); 这样 WordPress 就不会再次去数据库查询当前日志的留言了。 不再加载 comment-reply.js 我们知道 WordPress 在开启 Thread Comments 之后,WordPress 会要求在 head 加载一个叫做 comment-reply.js JavaScript 文件,它是用来实现 WordPress 原生嵌套留言的回复功能,但是我们使用多说之后,多说接管了所有留言的功能,多说也自带了嵌套回复功能的 JS,,所以 comment-reply.js 也就没有必要了,我们可以删除当前主题下的 header 中调用代码实现 WordPress 更快的加载。一般 comment-reply.js 加载代码如下: if ( is_singular() […]
为什么使用 WordPress 给企业建站
我是 2006 年开始使用 WordPress,然后就深深的喜欢上了这个开源的博客程序,测试和使用了上百个 WordPress 插件,并且自己也写几个 WordPress 插件。 更重要的是从 2007 年开始使用 WordPress 给企业或者工作室建站,到今天已经有好几年的经验,其中也有了许多成功的案例,也和其中几个对 WordPress 有相同爱好的朋友一起组建了一个专门使用 WordPress 给企业建站的团队:WordPress JAM。今天就自己这几年的使用 WordPress 给企业建站的经验说下为什么选择 WordPress。 WordPress 使用简单,WordPress 是一个博客系统,它要应对全世界上亿用户的不同的使用习惯,所以它的用户体验是很好的,WordPress 用户界面友好,很快就能上手使用,所以你不也用担心你的老板不会用。 WordPress 建站 SEO 好,收录快,WordPress 具有非常好的 SEO 特性,使用 WordPress 建立的网站可以很快被 Google 和者百度等搜索引擎收录,刚发布的文章最快几分钟就能收录,所以使用 WordPress 建站对企业进行网络推广非常有大的帮助。 WordPress 完全支持中文,WordPress 主要开发者是美国人,所以他的默认语言是英文的。但是对于不懂英文的同学,完全不用考虑语言的问题,WordPress 是本地化做的做的最好的开源程序之一,它完全支持 i18n 协议,各国爱好者也对其进行了本地化,国内有 WordPress 中文团队一直对其进行本地化工作。 WordPress 是可扩展,WordPress 虽然是一个博客程序,但是 WordPress 众多的插件是你可以把它改成任何程序,你可以把你的 WordPress 作为一个 Wiki 程序,也可以作为 […]
多说更新到 1.0 版本:支持社交账号注册和后台统计数据
最好用的社会化评论系统多说的 WordPress 插件更新到 1.0 版本,这个版本开始支持支持社交账号注册和后台统计数据,使得多说向互联网基础设施服务更进一步。1.0 版本的详细更新信息: 社交登录的新用户允许绑定和注册!在注册页面会出现社交登陆按钮,点击进行社交授权之后,会进入 WP 正式注册流程,输入用户名和邮箱,由 WP 发送密码到邮箱完成注册。注册后的账号自动默认绑定之前授权的社交账号。个人建议提供函数,在 WordPres 任何页面也能注册登陆,如果能够提供 API 接口,适用于客户端开发,这样的话多说将更加强大。 评论流实时更新和实时桌面提醒:当本页面有新的评论出现时,不用刷新页面,评论流中会自动显示新的评论,这个功能对直播和互动较强的页面特别有用。当出现新回复的时候,会在浏览器右下角弹出桌面提醒,点击即可转到评论页面。 查看统计数据:直接在WP后台可以查看多说评论统计数据,无需再到多说主站来查看 允许单篇文章或页面启用或禁用多说评论框:在文章或 Page 的编辑页面,开关文章评论的地方,新增“关闭本文多说评论”的勾选项,如果勾上了,则本页显示 WordPress 原始评论框,如果想连 WordPress 原始评论框都关掉,请再勾掉上方的“允许评论” 支持核心代码后置功能:多说的 embed.js 文件加载之前都放在最前,这样做是为了防止网站自身的js文件加载速度慢导致多说加载滞后(如广告js),但有些站长担心多说会阻拦其他进程,因此这个版本中增加了将多说embed.js后置的开关,我前面提供的:把多说的 JavaScript 脚本移到底部的 WordPress 技巧可以不再使用。 标签:WordPress 插件 多说

WP125: WordPress 的 125×125 广告管理插件
现在很多博客都在侧边栏放置 125X125 的广告位,但是怎么管理这些广告位呢:如何实现广告轮转,广告过期了怎么处理?所以我们需要一个高效的广告管理工具,除了可以使用第三方的广告管理工具(比如:Google DFP,百度广告管家)之外,我们还可以使用 WP125 这个 WordPress 插件来管理博客侧边栏 125X125 的广告位。 WP125 介绍 WP125: WordPress 的 125×125 广告管理插件 WP125 插件也是一个高效的广告管理工具,它能帮你非常高效的管理侧边栏 125X125 广告位,让你专心写日志。WP125 会在 WordPress 后台添加一个 “Ads” 顶级菜单,然后有三个子菜单,分别用来调整设置,添加和管理广告位。 WP125 功能 支持一栏或者两栏广告显示,并且支持模板函数。 支持无限的广告位,并且支持手工或者随机顺序。 可以跟踪广告点击次数。 当新建广告位的时候,你需要自己计算那天结束,只需要输入广告显示的天数即可。并且当广告位到期的时候会自动下线。 当一个广告位到期了,这个广告位的记录会被存档,并且以未激活状态保存,你可以查看这个广告位的最终点击数或者恢复广告位运行。 当一个广告位为空的时候,会显示一个你选择的默认的广告图片。一般是“Your Ad here”这样的图片,并且你可以设置默认链接链,一般我们把它设置为链向,广告统计,价格或者一个推荐链接。 可以设置当广告位过期的时候是否有邮件通知,这样你就可以及时知道广告位过期并通知广告商。 WP125 安装 和其他插件安装一样,通过 FTP 直接上传到插件目录,激活即可,也可以直接在 WordPress 后台安装。 如果你的主题支持 Widget,把 WP125 的 Widget 直接拖到侧边栏即可,如果不支持,可以在主题的 sidebar.php 的模板文件中添加 wp125_write_ads(); 这行代码。 WP125 […]
WordPress 技巧:显示同个父页面的其他子页面的链接
假设有一个父页面,然后它有一些子页面。当打开父页面的时候,你想在 sidebar 显示它的子页面的链接。 当打开子页面链接的时候,你还是想要显示它同个父级下的所有一组链接。现在问题是,首先要判断现在的页面时是相同父页面的其他子页面。我们无法通过一个简单 WordPress 函数就能解决这个问题。 <?php global $post; if($post->post_parent){ $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0"); } else { $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0"); } if ($children) { echo '<ul>'; echo $children; echo '</ul>'; } ?> 标签:WordPress 技巧

神一样的主题:London Live WordPress Theme
今天看到一条关于 WordPress 的新闻:南非政府:4000万投入换个WordPress网站: 南非自由邦省政府一位负责人称,他们投入了4000万南非兰特(约合人民币2750万)重新设计政府网站,结果却被承包商给涮了,巨额投资的成果竟然是个任何普通站长都能做的 WordPress 站点。 南非政府为此与一家承包商签署了为期三年的合同,但承包商交工之后南非政府就发现被狠狠地骗了,最终建成的网站令人啼笑皆非,用的居然是免费的Wordpress博客软件,以及一个40美元的付费主题:London Live WordPress Theme。 有业内人士评论说,南非政府支付的费用简直荒诞可笑,而这个合同也为该承包商带来了每月350万南非兰特(约合人民币240万)的利润。 看到这条新闻,除了感觉 WordPress 无比强大,南非政府无比弱智之外,我更想观摩下 London Live WordPress Theme 这个神一样的主题。 推荐指数:★★★★★ | London Live WordPress Theme的演示和详细介绍 London Live WordPress Theme 是 ThemeForest 一个付费的主题,价格确实是 40美元,目前已经卖出去了 2500 多份,如果不算 ThemeForest 分成,赚到了超过 10W 美元了,国外做 WordPress 主题确实不错的。这个主题有什么特点呢: 两种不同的导航菜单样式(明和暗) 推荐视频 两种幻灯片选项(长和短) 包含 PSD。 内容页也支持幻灯片 非常容易配置的主题面板 两种类型的列表页(博客和传统新闻类型) 支持 WordPress 3.0 自定义菜单 内建带验证的联系表单 自动图片缩放(timthumb) […]
WordPress 技巧:让作者在后台只看到自己的文章
普通的作者,在 WordPress 后台不能看到太多的内容,我们可以让他们看到自己的文章,代码如下: <?php function wpjam_parse_query_useronly( $wp_query ) { if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' ) !== false ) { if ( !current_user_can( 'add_user' ) ) { global $current_user; $wp_query->set( 'author', $current_user->id ); } } } add_filter('parse_query', 'wpjam_parse_query_useronly' ); ?> 标签:WordPress 技巧

使用 WordPress 的子主题(Child Themes)功能快速制作自己的主题
在了解子主题功能之前,先来看一下你在使用 WordPress 的时候是否是这样:不会自己制作主题,只好从网上下载一个,这个主题整体风格比较适合,但是有些小地方不太好,自己只是有一点 CSS 基础,可以修改一些简单的样式。修改的时候,却发现主题文件这么多,里面掺杂各种 PHP、HTML 代码,让人不知道在哪里修改。 太好了,那么我们开始学习子主题吧,子主题就是来解决这个问题的。它可以基于某个主题,继承它的功能和样式,然后让你自己进行简单的代码编写就可以衍生出一个新的版本。你还可以对子主题增加样式、功能等等,不仅仅是修改父主题样式那么简单。 做一个子主题非常简单,只需要用 FTP 什么的新建一个目录,然后增加几个文件就可以。你只需要了解很简单的 HTML 和 CSS 知识就可以修改父主题的样式等,当然当父主题升级之后,子主题样式、功能不会被覆盖失效。所以从这个角度来说,如果你想修改一个主题,你应该用子主题这个功能,而不是直接修改原主题文件。 下面就来具体实践看一下,我们就以 Twenty Twelve 这个主题为例吧,其他的主题都是一样的。 子主题的目录结构 子主题也是一个主题,也跟其他主题一样,放在 wp-content/themes 目录下面的文件夹中,文件夹的名称可以随便定义,为了形象一点,在示例中,我们可以新建 twentytwelve-child 这样一个文件夹存放子主题。这样的话,我们的 themes 文件夹中,至少有两个文件夹:twentytwelve、twentytwelve-child ,因为子主题要基于父主题,所以主题目录肯定要有父主题。 在子主题中,一般有下面几个文件: style.css (这个必须有) functions.php (这个可以有) 其他模板文件 (这个可以有) 其他文件 (这个可以有) style.css 是必须的 这是构建子主题中唯一必须有的文件,因为 WordPress 根据主题中的 style.css 头部信息来获取主题信息。特别是子主题,除了像一般主题一样添加头部信息之外,还需要添加父主题的名称,这样 WordPress 才能获取父主题的资源文件。 style.css 头部信息通常是这样的 /* Theme Name: Twenty Twelve Child Theme […]

为 WordPress 增加按分类搜索功能并自定义外观
如果用 WordPress 做一个小型门户网站,那么可能搜索增加需要“按分类搜索”的功能,这样可以快速搜索到指定分类的文章资讯。同时,我们还要进行外观的修饰,适应我们网站的整体风格。本文就是讲解如何在自己网站上增加一个像下图一样的分类搜索功能: 增加分类搜索功能 强大的 WordPress 的搜索模块,通过一定的参数来实现按照分类搜索。例如下面这个格式: http://blog.wpjam.com/?cat=0&s=搜索内容 对网站的 index.php 发送参数 s 加上内容表示直接搜索所有内容,如果再加上参数 cat 就可以实现相应目录下文章搜索,cat 参数的值为 分类目录对应的 ID。那么思路比较明确,我们在评论模块表单中,增加一个 select 下拉选项,然后输出网站的分类目录让用户可以选择,之后提交给 index.php 就可以了。 WordPress 已经提供了这样一个输出网站分类目录的函数 wp_dropdown_categories ,具体使用说明可以看一下官方文档,对于本例中,我们只需要使用下面一句代码即可输出目录: <?php wp_dropdown_categories("show_option_all=所有分类&hide_empty=0&show_count=0&hierarchical=1&depth=1&name=cat"); ?> 特别要注意的参数 name,因为你只有指定了 name 值为 cat,点击搜索之后,发送到 index.php 文件的搜索链接才有 cat 参数,才能实现搜索对应分类目录的功能。 注意:一定要把这个函数插入到搜索模块表单(form)里面,否则点击搜索按钮之后这个选项不会被提交出去。 这样,我们的按分类搜索模块已经完成了。 自定义样式 这时候,虽然功能实现了,但是外观实在是太丑了,太丑太丑了。 一般的思路就是对输出的这个 select 元素进行直接的 CSS 样式修饰,但是 CSS 只能修改个边框、背景颜色而已,特别是那个难看的三角真没办法修饰。目前网上比较常用的有:包裹几层 div 然后遮盖一下三角、模拟出来一个下拉列表、用一些其他的离奇 JS 手法等等。 当然,直接模拟出来一个下拉列表这种做法是最方便最简单的了,而且可以高度自定义样式。潜行者m 这次就是用的这种方法,下面就来介绍一下。 […]
WordPress 技巧:让 Widget 标题支持简单的 HTML 标签
在默认情况下,WordPress 的 Widget 标题是不支持任何 HTML 标签的,下面的技巧教你使用简单的代码替换实现在 Widget 标题实现支持 HTML 标签。 <?php /* Plugin Name: WPJAM HTML Widget Title Plugin URI: http://blog.wpjam.com/m/simple-html-in-widget-title/ Description: 让 Widget 标题支持简单的 HTML 标签 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_filter( 'widget_title', 'wpjam_html_widget_title' ); function wpjam_html_widget_title( $title ) { //HTML tag opening/closing brackets $title = str_replace( '[', '<', $title […]
微信机器人 WordPress 插件升级到 1.1 版本
微信机器人升级到 1.1 版本,这个版本主要修正由于公众平台接口更新引起的新用户订阅问题和可以让用户设置默认的缩略图: 修正新用户订阅提示问题:公众平台接口更新,新用户订阅将由之前推送一条“Hello2BizUser”文本,变化为推送一条“subscribe”的事件。1.1 版本也支持这个事件了,现在新用户订阅也可以正常回复了。 新增 WEIXIN_DEFAULT 常量:可以用来设置在没有缩略图时候的默认缩略图。 下载:微信机器人 WordPress 插件 1.1 版本 详细介绍:微信机器人 WordPress 插件:让你的微信公众账号自动回复用户 标签:WordPress 插件 微信
WordPress 技巧:去掉评论模块中的网站链接表单
在 WordPress 的评论模块中,有填写网站地址或者链接的表单,有时候我们想去掉它,因为有很多人来发垃圾评论,目的就是用用户名做关键词,填写一个链接,吸引浏览者去点击它。 想要去掉这个链接表单,一般想到的方法就是找到 comments.php 文件中的对应表单代码删掉。但是现在只需要一段非常简单的代码就可以去除: add_filter('comment_form_default_fields', 'unset_url_field'); function unset_url_field($fields){ if(isset($fields['url'])) unset($fields['url']); return $fields; } 只需要把上面代码添加到主题中的 functions.php 文件中,即可删除 网站链接 表单。妈妈再也不用担心博客上垃圾评论太多了:D 标签:WordPress 技巧
如何解决 WordPress“addComment is not defined”的错误
出现 addComment is not defined 这个问题是折腾 WordPress 评论的,出现这错误现象是在评论中,点击“回复”无反应,查找了一些老外的说法,各有各的说法,有说是 WordPress 2.7 开始遗留的问题,有些说的插件的问题,也有说是主题中 functions.php 的问题。 我自己博客也出现了 addComment is not defined 的问题,总结了下状况和一些方法,应该是插件或者主题 functions.php 的问题,十有八九是由于js的原因。 解决办法: 在主题文件header.php的 </head> 标签前加入 <?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' );?> 即可。
rel=”category tag” 的使用与思考
在网站优化中,对于a标签的优化可以增加rel属性,例如WordPress的分类链接标签是加上了 rel=”category tag”。rel 属性还有更多的应用,之前我在WordPress 友情链接增加 external nofollow,这也是一种优化方法。下面说说对于 rel=”category tag”的使用。 是否使用rel=”category tag” Denis 童鞋写的“解决 rel=”category tag” 问题以便通过 W3C 验证”值得参考和使用,我在思考去掉 rel=”category tag” 我们还不如去优化 rel=”category tag”。 WordPress rel=”category tag” 优化 rel=”category tag” 没有得到 W3C 的 HTML5 验证器的认可,那么我们不去掉,换个W3C认可的:rel=”archive”。 add_filter( 'the_category', 'wpjam_fix_catgory_rel' ); function wpjam_fix_catgory_rel ( $text ) { $text = str_replace('rel="category tag"', 'rel="archive"', $text); return $text; } 将以上代码放到主题文件functions.php中即可,我已经在博客上启用,大家可以查看下文章标题下面的分类a标签中的rel属性。 关于rel=”archive”的一些参考资料: The referenced document […]
WordPress 技巧:只在相关页面导入 Contact Form 7 的 JS 和 CSS
Contact Form 7 是一个非常强大并且易用的联系表单的插件,我在很多项目中都用到它,但是这个插件有个很不好的地方,会在整个博客的所有前台页面都导入 Contact Form 7 的 JavaScript 和 CSS 代码,对于性能要求极致的我们,当然不允许这样的事情发生,所以我们可以通过下面的代码实现只在含有 Contact Form 7 表单的页面导入 Contact Form 7 的 JS 和 CSS 代码。 add_action ( 'wp_enqueue_scripts', 'wpjam_cf7_enqueue_scripts', 99 ); function wpjam_cf7_enqueue_scripts(){ wp_dequeue_script('contact-form-7'); if(is_page('contact')){ $in_footer = true; if ( 'header' === WPCF7_LOAD_JS ) $in_footer = false; wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'includes/js/scripts.js' ), array( 'jquery', 'jquery-form' ), […]

WordPress 教程:自定义页面(Page)的模板样式
WordPress 中存在两种信息发布形式:文章(Post)和页面(Page),在写如何自己定义某个页面的特殊样式之前,有必要为一些新手简单介绍一下它们之间的区别,已经了解的朋友请跳过本节。 WordPress 中文章(Post)和页面(Page)的区别 WordPress 既然作为一个小型的 CMS 系统,文章肯定是最核心的内容。WordPress 中的文章是正文主体内容,一般可以随时修改、变动,文章之间有比较明确的时间、分类、标签等等相关关系。 而一个 CMS 中,肯定不能只包含正文文章,一般在底部都包含了诸如“关于我们”、“联系我们”等页面,WordPress 中的页面就是比较静态比较固定内容的页面,一般是独立的,与其他内容不太相关。如果有相关的内容,一般是父子关系,即父页面下面的子页面。而且页面可以很方便的定义“别名”(slug),也就是方便的自定义页面的链接。 自定义 WordPress 中的页面(Page)模板 页面结构、样式,在 WordPress 的主题目录中的 page.php 中定义,所有的页面都是一种结构和样式下,只是替换了一些内容而已。这势必无法满足我们的一些个性需求。 举个例子,一般来说页面的模板就跟文章的模板差不多,一个标题加上正文内容和下面评论。如果我博客的某个页面,想要展示的是我的作品集,而我的作品集想用一些并排的方块样式展示而不是以传统文章的形式展示。那么,就需要来自定义这个页面模板了。强大的 WordPress 系统已经考虑到我们这种合理的不合理需求,并提供了两种强大的自定页面的方法: 在后台选项指定当前页面要调用的模板文件 使用主题文件优先级规则来覆盖默认页面模板 在通过这两种方法自定义页面样式之前,请先确保你已经做出了一个可以使用的页面模板文件,不然的话本文是没有什么意义的。为了简便,本人用几个字来做演示。 在后台指定当前页面要调用的模板文件 当我们新建或者编辑一个页面的时候,在右侧的“页面属性”一栏里面会有一个“模板”选项,里面提供了可以选择的模板,我们只需要选中某个模板,就可以对当前的页面使用这个模板来显示。 你可能会问,为什么我的页面编辑页面没有这个选项?只有你的主题至少包含一个页面模板,这个地方才会检测出来并显示出来,然后提供选择。如果你没有自定义的页面模板,有什么必要出现这个选项? 我们现在就来创建自己的模板文件,方法很简单: 随便新建一个文件,然后自己写好 HTML 结构和对应的 CSS 样式以及 WordPress 的内容调用函数等,然后在最顶部加上如下的注释: <?php /* Template Name: 潜行者m 的 page 模板测试 */ ?> 加上之后,你就制作了一个名字为“潜行者m 的 page 模板测试”的页面模板了。这个文件可以随便命名,而且可以随便放在一个新建的文件夹中。一般比较推荐的方法是,新建一个名为“page-template”或者相关名字的文件夹,专门用来放置页面模板。只要某个文件带有这个注释并且放置在当前主题的目录中,就会被 WordPress 发现,然后就会出现在后台的选项中。 再说一下,这个页面模板可以是任意的内容,不一定复制原有的结构,可以自由发挥。如果没有调用什么 […]

WordPress 技巧:设置好评并输出
一些评论比较多的媒体站,管理员会把一些用户写的好评单独输出在侧边栏,但是怎么设置好评和输出呢?我们可以在 WordPress 后台评论管理界面评论管理区添加一个新的好评动作,并且通过 WP_Comment_Query 这个 Class 输出所有好评。 详细代码如下: <?php /* Plugin Name: WPJAM 好评 Plugin URI: http://blog.wpjam.com/m/wpjam-good-comments/ Description: 管理员可以在后台留言列表设置某条评论为好评,在前台通过<code>wpjam_get_good_comments</code>调用所有好评的评论。 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_filter('comment_row_actions','wpjam_good_comments_comment_row_actions',10,2); function wpjam_good_comments_comment_row_actions($actions, $comment ){ if(get_comment_meta( $comment->comment_ID, 'good_comment',true) == '1'){ $actions['good_comment'] = '<a href="'.home_url('/wp-admin/edit-comments.php?good_comment=0&comment_id='.$comment->comment_ID).'">取消好评</a>'; }else{ $actions['good_comment'] = '<a href="'.home_url('/wp-admin/edit-comments.php?good_comment=1&comment_id='.$comment->comment_ID).'">好评</a>'; } return $actions; } add_action('admin_head','wpjam_good_comments_admin_head'); function wpjam_good_comments_admin_head(){ if(isset($_REQUEST['good_comment'])){ if($_REQUEST['good_comment'] […]
WordPress 技巧:给每个页面都设置不同的菜单
做项目总是有一些很奇怪的要求,比如有些客户需要给每个页面设置不同的菜单,但是这些总是难不倒 WordPress: <?php /* Plugin Name: WPJAM 自定义菜单 Plugin URI: http://wpjam.com Description: 实现每个页面都设置不同的菜单 Version: 0.1 Author: Denis Author URI: http://wpjam.com */ add_action('init','wpjam_register_nav_menus_init'); function wpjam_register_nav_menus_init(){ global $wpdb; $sql = "SELECT meta_value FROM {$wpdb->prefix}postmeta WHERE meta_key = 'nav_menu';"; $nav_menus = $wpdb->get_col($sql); if($nav_menus){ foreach ($nav_menus as $nav_menu){ if($nav_menu){ register_nav_menu( $nav_menu, $nav_menu); } } } } add_action('save_post', 'wpjam_save_nav_menu_options'); function […]
WordPress 技巧:当搜索结果只有一篇时直接重定向到日志
在 WordPress 进行搜索的时候,如果搜索结果只返回一篇日志的时候,最好的方法是直接重定向到该日志。 add_action('template_redirect', 'wpjam_redirect_single_post'); function wpjam_redirect_single_post() { if (is_search()) { global $wp_query; if ($wp_query->post_count == 1) { wp_redirect( get_permalink( $wp_query->posts['0']->ID ) ); } } } 标签:WordPress 技巧
5个使你 WordPress 网站更安全的好习惯
网站经常面对各种各样的威胁,比较常见的就是:黑客攻击、服务器崩溃导致数据丢失。本文介绍五个运营 WordPress 需要具备的好习惯,形成习惯之后,可以提高你的 WordPress 站点的安全性。 1. 经常备份网站数据 这个习惯是必须的,即使是再安全的服务器也有崩溃损失文件的可能性,此外如果网站被黑客攻击了,也会造成文件丢失或被修改。最简单有效的方法当然就是备份数据了。但是备份数据也是需要有一定的规划,不能说想备份的时候就备份,忙的时候就算了。当然,也有一些比较懒的备份方法,那就是使用 WordPress 数据备份插件。一般比较常用的有: BackWPup BackUpWordPress 特别推荐 BackWPup 这个插件,设置一下就可以自动执行备份操作,而且可以自动把备份保存到第三方存储服务(通常是网盘)上。关于网站备份的一些经验,推荐潜行者m的这篇文章:如何进行高效有序的网站备份。 2. 使用复杂的密码 这一点不用多说了,很多被入侵事件都是因为账户设置了一个比较简单的密码(弱口令),让黑客配合社会工程学或者暴力测试轻松的破解出来。所以不仅仅是在自己的网站,在其他网站注册账号,也都要尽量使用一个复杂的密码,这样可以减少被猜出的几率。 特别要注意的是,一定不要使用 admin 作为你 WordPress 默认登陆帐户名,很多黑客工具都是用 admin 作为登陆尝试账号进行暴力猜解。 3. 安装可信的插件和主题 单纯的 WordPress 肯定无法满足复杂的需求了,往往需要安装一些插件和主题来提供个性化的需求。这时候,就要小心了。网上有很多 WordPress 主题分享站点,但是分享的这些主题,往往都是被这些网站修改了的,理论上说都是不安全的。很多 WordPress 站点被入侵事件,就是由于安装了网络上鱼目混杂的主题或者插件导致的。 虽然网络上也有一些比较成熟可靠的第三方主题插件分享平台,但是 WordPress 官方的主题库、插件库是绝对权威安全的(有志愿者亲测)。 此外,很多比较好的主题、插件,由于一些特殊原因无法提交官方,如果你想要使用那么请从主题、插件作者页面下载,不要相信那些经过二次修改、汉化过之类的,除了官方作者修改之外,别人的修改往往都有安全隐患。 4. 及时升级你的 WordPress WordPress 每次升级都会带来一些麻烦,例如某项功能取消了,某些函数废弃了等,这些问题可能会导致你的主题、插件的部分功能无法使用,还需要进一步升级主题、插件等等。但是,我们还是要尽量把 WordPress 升级到最新版本。原因很简单,每次官方升级,都是修复一些 Bug ,这些 Bug 往往存在一些安全隐患。 WordPress 在安全更新日志中,都会提示修改了哪些 Bug ,如果你不升级的话被黑客得知你的 WordPress 版本,可能会通过相关的 […]
WordPress 技巧:让分类和标签的描述支持 HTML 代码
默认 WordPress 后台分类和标签的编辑页面,分类和标签的描述是不支持 HTML 代码的,我们可以通过在当前主题的 functions.php 文件添加如下代码让分类和标签的描述支持 HTML 代码: remove_filter( 'pre_term_description', 'wp_filter_kses' ); remove_filter( 'pre_link_description', 'wp_filter_kses' ); remove_filter( 'pre_link_notes', 'wp_filter_kses' ); remove_filter( 'term_description', 'wp_kses_data' ); 标签:WordPress 技巧
WordPress 网站如何防范大规模暴力破解攻击
WordPress 网站遭遇大规模暴力破解攻击 WordPress 网站过去几天遭到了大规模的暴力破解攻击,攻击者首先扫描互联网上的 WordPress 网站,然后利用 Web 服务器组建的僵尸网络不断尝试用户名和密码试图登录管理后台。 一般的僵尸网络是利用普通 PC,而这次攻击者使用了超过 9万台 Web 服务器,服务器比 PC 有更大的带宽和连接速度,因此可以更快的发动攻击。攻击者暴力攻击WordPress 管理入口,使用默认的用户名 admin,并尝试数以千计的密码。 如果防止被扫描和攻击 从上面这则新闻,可以看出攻击者主要是首先扫描 WordPress 网站,然后通过穷举法攻击 WordPress 的默认用户名:admin,我们可以通过以下三个步骤来减少被攻击以及被攻陷的机会: 在当前 functions.php 添加以下代码去掉 WordPress 版本信息,减少被扫描到的机会。 remove_action( 'wp_head', 'wp_generator'); 默认的用户名不要为 admin,通过一下 SQL 修改 admin 的用户名: UPDATE wp_users SET user_login = 'newuser' WHERE user_login = 'admin'; 安装 Limit Login Attempts 插件,限制登陆尝试次数,防止通过穷举法获取后台密码。

WordPress 技巧:不通过登陆后台禁用插件
有时候会因为安装的插件有 Bug 导致直接连后台都登陆不进去的尴尬情况;也有时候安装了太多插件,在后台一一禁用,工作量太大。那么就可以参考本文介绍的两种方法。 使用 FTP 或空间管理面板 方法很简单,把插件的文件删掉或者改名,让 WordPress 找不到插件文件,自然就无法调用相关插件了。WordPress 插件文件放在 /wp-content/plugins 文件目录下面,一个插件一个文件夹。 这里可以使用 FTP 或者是你主机提供的后台管理面板中的文件管理器,建议对文件夹改名而不要删除,这样可以保留插件文件以便恢复。 通过修改数据库禁用 WordPress 插件 上面那种方法比较简单,但是插件的信息还被记录在 WordPress 数据库中,可能会发生一些意外情况。直接修改数据库中的关于插件的记录值,就可以比较安全的禁用插件。 但是,这需要你有修改数据库的权限和途径。一般来说,在主机空间控制面板都会提供诸如 PHPMyAdmin 之类的 MySQL 数据库修改软件,本文就以 PHPMyAdmin 为例。 记录 WordPress 插件信息的表位于:wp_options 表中的 active_plugins 字段,active_plugins 的值记录着插件使用情况。 就我个人网站来说,只使用了多说一个插件,所以就字段值如上图。如果禁用所有插件,你只需要用 a:0:{} 来代替 active_plugins 的值即可。如果你想禁用某个插件,就按照对应的格式,删掉相关信息即可。 标签:WordPress 技巧
WordPress 教程:为插件自定义数据表
当你写插件的时候,你可能需要写东西到数据库中去,一般来说,有两种数据要存储,第一种是安装数据,一般存储在 wp_options 表中,使用 WordPress 的 options 机制来实现。第二种是数据,可以存储到 postmeta 表或者 usermeta 表中。如果数据特别多,就需要单独创建数据表了。这篇文章就讲讲如何在写插件时候创建数据表。 一般在写插件时候创建数据库有如下三个步骤: 创建一个添加新数据表的 PHP 函数。 保证插件启动的时候调用这个函数。 如果新版本有不同的数据表结构,创建一个升级函数。 今天我就以微信机器人 WordPress 插件高级版的 新功能:自定义文本回复,来讲解下这个过程,其中的第三步,由于没有数据库的升级不涉及。 创建一个添加新数据表的 PHP 函数 我们这个插件的安装函数叫做:weixin_robot_texts_crate_table。 1. 数据库表前缀 默认 WordPress 数据库标签前缀都是 wp_,但是有人如果在一个数据库安装两个及以上 WordPress,就需要在 wp-config.php 设置 WordPress 数据库表前缀来区别,所以我们向 WordPress 数据库添加新表的时候,要先找找到数据库表前缀。我们可以在变量 $wpdb->prefix 找到。代码如下: global $wpdb; $table_name = $wpdb->prefix . "weixin_robot_texts"; 2. 判断表是否存在 可以通过一条 SHOW TABLES SQL 查询来判断。 if($wpdb->get_var("SHOW […]
WordPress 技巧:为评论模块增加更多 HTML 标签支持
WordPress 原生的评论模块内容,支持使用 HTML 标签来增强评论内容的格式和效果。但是这肯定会带来一些安全隐患,特别是评论这种随便一个浏览者都可以提交数据的地方,容易产生跨站攻击(XSS),所以 WordPress 系统严格的限制了评论模块可以使用的 HTML 标签。默认的情况下,只支持:a、abbr、acronym、b、blockquote、cite、code、del、em、i、q、strike、strong 这几个标签和对应的相关属性。 这些标签肯定是远远不够用的,如果是技术博客,评论往往需要包含代码,那么可能就需要添加 pre 标签的支持,如果想要评论中可以引用图片,那么需要 img 标签的支持。本文就是来讲解如何在评论模块中增加更多 HTML 标签的支持。 WordPress 允许的标签和属性 WordPress 出于安全考虑,严格的限制了文章和评论等可编辑内容支持的 HTML 标签类型和标签的属性。具体的内容可以看:wp-includes/kses.php 这个文件,里面有两个全局数组变量 $allowedposttags 和 $allowedtags ,这两个数组变量就包含了允许的 HTML 标签,每个标签的键值又是一个数组,记录了这个标签常用的属性。例如: $allowedtags = array( 'a' => array( 'href' => true, 'title' => true, )); 上面这个数组的含义就是支持 a 标签以及对应的 href、title 属性。 让 WordPress 评论支持更多标签的方法 思路很简单,先按照上面的格式,声明一个标签信息数组,然后 hook 勾到 WordPress 上面。例如想要增加 […]
WordPress 技巧:使用内存缓存提高 Postviews 效率
使用 WP-Postview 插件进行日志浏览数统计的时候,会有个问题,就是每个页面会多出三个 SQL 查询。这样每次浏览日志都会多出三次查询,对数据库其实是一次蛮大的负担,有没有办法解决这个问题呢?如果你和我一样网站启用了 Memcached 这类内存缓存组件的话,我们可以把日志的流量缓存到内存中,每次增加10次浏览才写入数据库中去。 <?php /* Plugin Name: WPJAM Memcached PostView Plugin URI: http://blog.wpjam.com/m/memcached-postviews/ Description: 使用内存缓存提高 WP-Postviews 效率 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_action('init','wpjam_postviews'); function wpjam_postviews(){ if(function_exists('the_views')){ //已经安装了 postview 插件 global $wp_object_cache; if(isset($wp_object_cache->mc) && $wp_object_cache->mc){ //已经安装了 memcached 插件 add_filter('update_post_metadata','wpjam_postviews_update_post_metadata',10,5); function wpjam_postviews_update_post_metadata($check, $object_id, $meta_key, $meta_value, $prev_value ){ if($meta_key == 'views'){ […]
WordPress 技巧:删除 wp_head 中无关紧要的代码
WordPress 通过 wp_head() 在页面的头部输出了很多东西,但是这些标签很多是没用的,虽然这些代码也没有什么副作用,但是个人更喜欢保持一个简洁的 header。 所以这篇日志将教你如何移除 header 中的下面几个标签,你可以根据自己的需求选择移除: Really Simple Discovery (RSD) link Windows Live Writer link WordPress generator 信息 和日志相关的 Link Really Simple Discovery 输出代码如下: <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://example.com/xmlrpc.php?rsd" /> 这是 XML-RPC 客户端发现机制需要用到的,如果你不知道这个是什么意思,或者没有集成类似 Flickr 这类服务到你的站点,那么你可以安全的移除它: remove_action('wp_head', 'rsd_link'); Windows Live Writer 输出代码如下: <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://example.com/wp-includes/wlwmanifest.xml" /> 如果你没有使用 Windows Live Writer 来写日志,那就移除它吧: remove_action('wp_head', 'wlwmanifest_link'); […]
WordPress 技巧:在 RSS Feed 中输出文章版权信息
有很多垃圾站点等,通过你博客的 RSS Feed 来抓去你的文章显示在他们的网站上。但是我们又不能轻易的 禁用 WordPress 的 RSS Feed 功能,毕竟还是有很多用户去用 RSS 订阅你的博客。 如此,我们可以自动在 RSS Feed 输出文章的时候,自动在后面加上一些版权信息、原文作者、原文地址等等信息,也可以是一些其他自定义的信息(你懂)。很简单的几句代码就可以实现这个功能: function wpjam_add_feed_content($content) { if(is_feed()) { $content .= '<p>本文版权所有 '.bloginfo('name').' 转载请务必保留版权信息。</p>'; } return $content; } add_filter('the_excerpt_rss', 'add_feed_content'); add_filter('the_content', 'add_feed_content'); 作为演示,我只输出了一句很简单的话,使用 bloginfo 函数输出你博客的网站名称,你可以按照自己的需求修改这里要输出的内容。 标签:WordPress 技巧

