标签: wordpress

  • 『WordPress』条件加载JavaScript脚本实现SyntaxHighlighter语法高亮

    在前不久发布的《SyntaxHighlighter:无需插件的语法高亮解决方案》一文中,我们介绍了Syntax Highlighter的用法,通过调用远程javascript脚本实现了语法高亮效果。接下来我们要谈谈如何对其进行优化。

    syntax-highlighter-conditional-loading

    场景

    考虑到代码高亮仅在特定场合使用,亦即,仅当页面存有需要高亮展示的代码时。因此,我们只需在相应页面加载渲染用的javascript脚本即可,而无需在全部页面调用,如此一来可以进一步优化页面加载时间。

    分析

    于是我们的问题转化为:如何对带有代码的页面进行判断呢?以本站为例,与代码有关的文章都归属在分类“程序人生”及其子目录下,因而,我们可以在加载javascript时,对这一条件进行判断,然后选择是否进行Syntax Highlighter脚本的调用。我们通过WordPress提供的Conditional Tags不难解决这个问题。

    方案

    整个解决方案分两大步骤进行:

    1. 判断日志是否归属于某一分类或其子目录。
      这里我们需要构造一个做出此条件判定的函数。幸运的是,WordPress已经给出了答案,即:
      function post_is_in_descendant_category( $cats, $_post = null )
      {
      	foreach ( (array) $cats as $cat ) {
      		// get_term_children() accepts integer ID only
      		$descendants = get_term_children( (int) $cat, 'category');
      		if ( $descendants && in_category( $descendants, $_post ) )
      			return true;
      	}
      	return false;
      }

      我们只需将此函数附加到主题的function.php文件中即可。

    2. 修改header.php,利用上述函数判断并加载Syntax Highlighter的javascript脚本。

      首先我们利用WordPress的wp_enqueue_script函数,加上上面的条件判断函数,加载JS脚本,注意参数为分类ID:

      // 仅当显示指定目录或其子目录下的日志时才加载脚本。
      if ( in_category(100) || post_is_in_descendant_category(100) ) {
      	wp_enqueue_script('shCore', 'http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js');
      	wp_enqueue_script('shBrushPhp', 'http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js');
      	wp_enqueue_script('shBrushSql', 'http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js');
      	wp_enqueue_script('shBrushXml', 'http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js');
      }

      然后象往常一样加载CSS并调用使Syntax Highlighter生效的all()函数:

      <!-- Syntax Highlighter CSS -->
      <?php if ( in_category(100) || post_is_in_descendant_category(100) ) { ?>
      <link rel="stylesheet" type="text/css" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" />
      <link rel="stylesheet" type="text/css" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" />
      <?php } ?>
      
      <script type="text/javascript">
      	SyntaxHighlighter.all();
      </script><!-- End of Syntax Highlighter -->

    至此我们就完成了语法高亮的条件加载,节约了页面载入时间。

  • 『WordPress』SyntaxHighlighter:无需插件的语法高亮解决方案

    qq21-syntaxhighlighter-graphicsview

    引言

    需要用到代码的博客常常需要解决语法高亮的问题。方案通常有两种,第一是插件,第二是自动生成HTML高亮代码的网站。这二者各有其优缺点:

    1、插件
    不具体介绍,搜索一下能找到很多。
    优点:生成代码简洁无冗余,使用方便,变更样式容易。
    缺点:许多插件通过short-code的方式实现高亮,如果移除插件则样式失效。
    2、网站
    比如知名的发芽网
    优点:通过纯HTML标记实现,样式能持久保存。
    缺点:生成代码复杂,更改样式麻烦。

    以上两种是目前常用的语法高亮方式,这里都不赘述,为了规避上述方式的缺陷,本站决定另辟蹊径,采取引用第三方JS和CSS的方法解决代码高亮问题,即SyntaxHighlighter。

    安装

    基本步骤

    为WordPress添加SyntaxHighlighter支持只需遵循一下步骤:

    1. 为页面新增对基础文件的引用:shCore.js和shCore.css。
    2. 添加合适的笔刷文件,每种语言对应一个笔刷文件。
    3. 引用shCore.css和shThemeDefault.css。
    4. 调用SyntaxHighlighter.all()函数,完成。

    具体到WordPress上,只需在主题header.php文件中的<head />标签内加入以下代码:

    <!-- Syntax Highlighter -->
    <!-- Include required JS files -->
    <script type="text/javascript" src="https://alexgorbatchev.com/pub/sh/current/scripts/shCore.js"></script>
    <!--Include a brush for every language you want to highlight -->
    <script type="text/javascript" src="https://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js"></script>
    <script type="text/javascript" src="https://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js"></script>
    <!-- Include *at least* the core style and default theme -->
    <link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css" />
    <link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" rel="stylesheet" type="text/css" />
    <!-- Finally, to actually run the highlighter, you need to include this JS on your page -->
    <script type="text/javascript">
    SyntaxHighlighter.all()
    </script>

    没错,以上EMACS编辑器高亮效果即是用本文介绍的方案实现的,除此之外还有多种高亮主题可供选择。

    <pre />标签方法

    pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。<pre /> 标签的一个常见应用就是用来表示计算机的源代码。

    优势:简单易用;如果高亮方法出现问题,不会对已有样式造成大的影响;在RSS阅读器中显示为普通<pre />标签的效果。

    问题:必须对尖括号使用转义字符。即,“<”用“&lt;”,“>”用“&gt;”替换。

    SyntaxHighlighter会自动搜寻以适当class属性修饰的<pre />标签,然后调用相应的笔刷进行渲染,达到语法高亮的效果。class中唯一需要写入的参数是brush(详见配置),取值为笔刷短码

    以高亮php代码为例,使用时只需为代码段添加

    <pre class="brush: php"></pre>

    标签就能实现高亮。

    结语

    除了<pre />方法之外,还有一种<script />方法,在此不做介绍。

    本方法的优点包括:

    1. 代码简洁无冗余,只需添加几行对JS和CSS的引用即可。
    2. 样式持久保存,不依赖short-code解析。
    3. 变更样式容易,只需修改一行代码更换加载的CSS主题。
    4. 使用方便,无需每次手工粘贴代码到网站去生成HTML标记,只需给代码段增加pre标签。
  • 『WordPress』Contact Form 7简体中文语言包

    Contact Form 7(CF7)是一款为WordPress博客增加联系表单的插件,填入表单的数据将通过邮件发送到管理员的邮箱(默认)或任意设定的邮件地址。同时还具有上传文件作为附件、多语言支持等特性。

    wordpress-plugin-contact-form-7

    CF7可管理多个联系表单,而且支持表单个性化以及邮件内容定制。表单使用AJAX技术提交,支持CAPTCHA、Akismet垃圾过滤功能等。

    由于原简体中文的汉化作者没有继续跟进新版的汉化工作,我决定自己对该插件进行汉化。翻译结果经测试基本满意,如果你觉得有些地方存在歧义或需要进一步润饰,请与我联系。如果下载链接失效,也请告知,我将随时补档。

    • 适用版本:v2.4.5
    • 插件地址:点击查看
    • 官方网站:http://contactform7.com
    • 汉化文件:下载点1:GE.TT;下载点2:U115;下载点3:MegaUpload
    • 使用说明:下载后放入插件目录的“languages”文件夹下替换旧版文件即可
    • 最后更新:2011年5月6日
  • 实用WordPress SQL语句集锦:第四章

    在《实用WordPress SQL语句集锦:第三章》中,我们讲解了手工重置密码和变更WordPress域名的方案。本篇我们谈谈显示SQL查询执行次数和恢复数据库的内容。

    7、在博客上显示SQL查询执行次数

    useful-wordpress-sql-hacks-07

    问题。如果我们打算优化博客页面的加载时间,了解对数据库发起的查询次数是很有必要的。为了减少数据库查询次数,首先要知道在单个页面上有多少查询生成。

    方案

    1. 这次无需登录phpMyAdmin。只需打开主题的footer.php文件,并追加以下代码行:
      <?php if(is_user_logged_in()) { ?>
      <?php timer_stop(1); ?> 秒内执行 
      <?php echo get_num_queries(); ?> 次查询。
      <?php } ?>
    2. 保存文件并访问你的博客。在页脚中,我们会看到向WordPress数据库发起查询的次数以及执行这些查询所花费的时间。

    解释。似乎很多WordPress用户不知道这个有用的函数。“get_num_queries()”函数返回页面加载过程中执行的查询数。

    需要注意的是,上述结果只对登录用户显示,因为该指标对一般访问者和搜索引擎机器人没有意义。如果你想要将查询数完全公开,只需删除“if (is_user_logged_in())”这个判断条件即可。

    来源

    8、恢复WordPress数据库

    useful-wordpress-sql-hacks-08

    问题。如果出于某些原因,比方说网站被黑或升级出错,造成了博客数据的丢失或破坏。在你做了数据备份的情况下(希望如此!),将备份文件导入WordPress数据库即可完成恢复。

    方案

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 在横向列示的菜单上点击“导入”按钮。
    3. 点击“浏览”按钮并选择硬盘上最新的数据库备份文件。
    4. 点击“执行”按钮。如果一切顺利的话,你的WordPress数据库又恢复正常了。
  • 实用WordPress SQL语句集锦:第三章

    在《实用WordPress SQL语句集锦:第二章》中,我们分析的是关于批量删除待审核评论和变更日志归属的SQL命令。这一章我们讲解手工重置密码和变更WordPress域名的方案。

    5、手动重置密码

    useful-wordpress-sql-hacks-05

    问题。为了加强对博客的保护,人们往往选择强密码,如u7* KoF5i8_这样的字符串。这个习惯很好,但我也听到不少忘记密码的故事,绝对的杯具啊。

    方案。虽说遗失密码后,WordPress可以发送电子邮件,让你通过一个链接完成密码重置。但是,如果你不能访问WordPress数据库中记录的电子邮件地址了,或者你比较喜欢运行一个简单的命令来解决该问题,那么下面的方法绝对适合你。

    1. 登录phpMyAdmin,选择WordPress数据库,然后打开SQL窗口。
    2. 输入以下命令(假设你的用户名是“admin”):
      UPDATE wp_users 
      SET user_pass = MD5('PASSWORD') 
      WHERE wp_users.user_login = 'admin' LIMIT 1;
    3. 大功告成。原密码已经被修改为上述语句中标记为“PASSWORD”的字符串。

    解释。用户密码存储在wp_users表中。当然,密码是经过MD5哈希加密的。

    我们提交一个“UPDATE”SQL请求,并使用MySQL内建的MD5函数将新密码转换为MD5值,然后更新原密码。“WHERE”子句确保我们仅更新管理员账号的密码。注意:未经“WHERE”条件限制的语句将导致所有用户密码全部被更新!

    来源

    6、变更WordPress域名

    useful-wordpress-sql-hacks-06

    问题。虽然我们不建议这么做,但有时你可能希望变更博客域名,同时保留原有数据。由于WordPress将域名记录在数据库中,我们必须更新数据库相应条目,以建立新域名与原博客的关联。

    方案

    1. 你猜对了:首先要做的仍然是登录phpMyAdmin,然后选择WordPress数据库。
    2. 点击“SQL”按钮,打开SQL命令窗口。要改变WordPress URL地址,先执行这个命令:
      UPDATE wp_options 
      SET option_value = replace(option_value, 'http://www.oldsite.com', 'http://www.newsite.com') 
      WHERE option_name = 'home' OR option_name = 'siteurl';
    3. 然后,我们要变更各日志的相对URL(GUID)。以下命令能完成该项工作:
      UPDATE wp_posts 
      SET guid = replace(guid, 'http://www.oldsite.com', 'http://www.newsite.com');
    4. 任务接近完成。我们要做的最后一项工作是更新wp_posts表,以确保没有任何绝对URL仍使用原域名:
      UPDATE wp_posts 
      SET post_content = replace(post_content, 'http://www.oldsite.com', 'http://www.newsite.com');
    5. 大功告成。现在我们应该能够使用新网址登录到WordPress控制板了。

    解释。要轻松改变WordPress域名,我们可以借助于超有用的MySQL函数“replace”,即,以一个字符串取代另一个。

    来源

  • 实用WordPress SQL语句集锦:第二章

    在《实用WordPress SQL语句集锦:第一章》中,我们论述了备份数据库和批量删除文章修订的方法。接下来我们分析关于批量删除待审核评论和变更日志归属的SQL命令。

    3、瞬间删除5000条垃圾评论

    useful-wordpress-sql-hacks-03

    问题。真人真事:我的一个朋友最近搭建了自己的博客,并开始在网上四处推广。经过几个星期的紧张工作,他休了几天假没有上网。

    回到家里他看了看博客,结果看到…超过5000条待审核评论!当然,其中大多数是垃圾评论,本来他打算逐一检验,以确保不会删掉一般读者的有效评论。

    方案。令人高兴的是,友人把他的垃圾留言问题告诉了我。在我向他展示下面这条有用的SQL语句前,他已经花了45分钟手工删除垃圾评论。

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 点击“SQL”按钮。将以下代码粘贴到SQL命令窗口:
      DELETE from wp_comments 
      WHERE comment_approved = '0';
    3. 向垃圾评论说再见!享受未受垃圾评论侵扰的数据库吧!

    解释。wp_comments表包含一个名为comment_approved的字段,取布尔值(1或0)。通过审核的评论该值为1,待审核的评论取0值。通过运行上面的命令,我们删除了全部待审核评论。

    谨慎行事。如果你有一大堆垃圾留言需要删除,这种解决方案是非常有用的,但也可能删掉未经审核的有效评论。因此,如果你还没用上Akismet,马上安装它以阻止垃圾评论的骚扰。

    来源

    4、变更日志归属

    useful-wordpress-sql-hacks-04

    问题。WordPress安装完成之后会自动创建一个“admin”帐户。一些博客作者误将该帐号用于写作博文,后来才意识到这不是个人用户。

    方案。逐篇文章修改作者署名需要花费很多时间。令人高兴的是,SQL语句可以帮你搞定这一切:

    1. 登录phpMyAdmin,然后选择WordPress数据库。
    2. 首先,我们必须找到正确的用户ID。为此,打开SQL命令窗口,并执行以下命令:
      SELECT ID, display_name FROM wp_users;
    3. phpMyAdmin将显示一个与WordPress用户名相关联的用户ID列表。假设NEW_AUTHOR_ID是最近创建的作者ID,而OLD_AUTHOR_ID是原管理员帐户ID。
    4. 欲用NEW_AUTHOR_ID替换OLD_AUTHOR_ID,运行以下命令:
      UPDATE wp_posts 
      SET post_author = NEW_AUTHOR_ID 
      WHERE post_author = OLD_AUTHOR_ID;
    5. 这样一来,所有以前由admin用户撰写的文章,现在都转换到你所选择的新用户名下了。

    来源

  • 实用WordPress SQL语句集锦:第一章

    过去10年来,MySQL数据库以令人难以置信的速度在网络上流行起来。每一个WordPress博客都由MySQL数据库驱动,存储博客日志、设置、评论等内容。

    面对WordPress,虽然插件或编码技巧可以解决一些问题、完成某些任务,但是有时除了通过phpMyAdmin或SSH执行SQL语句外,你别无选择。下面让我们来看看WordPress实用SQL语句集锦。本系列文章的每个篇章都严格按照提出问题、解决问题、解释说明的思路撰写,以使读者真正了解掌握解决问题的方法,达到举一反三的效果。

    1、创建数据库备份

    useful-wordpress-sql-hacks-01

    问题。尽管本文论及的所有语句已经过测试,我们仍然应当先备份MySQL数据库,再尝试执行这些语句。

    方案。要手工创建一个WordPress数据库备份,请按照下列步骤进行:

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 接着在横向列示的菜单上点击“导出”按钮。
    3. 选择压缩方法(我个人习惯使用gzip),然后点击“执行”按钮。
    4. 浏览器会提示是否需要下载备份文件。选择“是”,然后将该文件储存在硬盘驱动器上。

    解释。需要注意的是,创建WordPress数据库备份的任务,可以通过WP-DB-Backup插件更容易地实现。每一个WordPress用户都应该安装此插件,并定期进行数据备份。(译注:此提示虽显絮叨却是博客作者都应遵循的准则。因为主题或插件没了都可以再安装,但数据没了那么所有过往的努力都将付诸东流。)

    2、批量删除日志修订记录

    useful-wordpress-sql-hacks-02

    问题。修订版本是WordPress 2.6引入的功能,该功能虽然在某些场景下比较有用,但也增加了MySQL数据库的大小。尽管我们可以手动删除文章修订版本,但这是非常漫长而枯燥的工作。

    方案。这个问题的解决方法很简单:我们通过执行简单的SQL查询来批量删除日志修订记录。如果你有很多的日志,其结果可能令人难以置信:数据库的大小将减少一半!

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 点击“SQL”按钮。将以下代码粘贴到SQL命令窗口:
      DELETE FROM wp_posts WHERE post_type = "revision";
    3. 大功告成。最终节省的数据库空间大小取决于博客文章数的多少。

    解释。wp_posts表有一个名为post_type的字段。此字段有几个取值,如“post”、“page”或“revision”。想要去除文章修订版本,只需运行一个命令以删除wp_posts表中,post_type字段等于“revision”的记录。

    来源

  • 『WordPress』博客搬迁更换域名的数据库操作

    博客更换域名涉及到后台数据库三个方面的记录更新:

    1. 站点域名设置,包括wp_options表中的home和siteurl两个字段;
    2. 文章内容中手工输入的域名更新,涉及wp_posts表的post_content字段;
    3. 文章链接更新,对应于wp_posts表的guid字段

    详细代码如下:

    UPDATE wp_options 
    SET option_value = replace(option_value,'old domain','new domain') 
    WHERE option_name = 'home' 
    OR option_name = 'siteurl';
    
    UPDATE wp_posts 
    SET post_content = replace(post_content,'old domain','new domain');
    
    UPDATE wp_posts 
    SET guid = replace(guid,'old domain','new domain');

    注意domain格式为 http://dengkefu.com 最后不要带”/”

  • 最不该存在的 WordPress 插件 – Easy to Hide

    先看一篇来源于博客联盟的日志:

    自从介绍了wordpress hidepost plugin这个插件后,一直就在找一个更好的插件,不需要用户注册——因为这对部分用户来说太麻烦了,但同时又对部分内容有限制权限的,今天终于找到一款这样的插件——Easy to Hide:仅对发表评论者可见。

    插件是国人LoneDisc开发的,Easy to Hide wordpress…

    …功能介绍:

    隐藏掉关键的内容,强迫访客留言以赚取人气;

    通过Easy to Hide wordpress插件:仅对发表评论者开放部分内容 – 博客联盟.

    看到这玩意就闹心。其存在完全违背了互联网的共享精神,为搏人气不择手段,可耻。国人开发?为什么?因为这玩意在国内最有市场,符合国人思维方式,符合咱们国情!

    很早以前(上世纪九十年代),网络曾是净土,网民们本着自愿主动的原则互相交流,真正的和谐。随着互联网规模和影响力的扩大,有人开始认识到高人气站点背后隐藏的商业潜力,于是有了强迫留言的论坛。现在连博客都难幸免,实在是悲哀。看到评论者留下的“顶”、更有甚者”dddd”这样的留言,身为作者会觉得有意思么?难道不会想看到能延伸主题的有深度的留言,能够进行深层次的探讨?我是宁愿没有留言也不愿看到空洞无物的说话。

    “不需要用户注册——因为这对部分用户来说太麻烦了”,切,还挺会为用户考虑的,就可劲儿装吧。要真为用户着想,会拿这么个破玩意整蛊人?少自欺欺人了!

    这样的插件出现,其本身就是对 WordPress 的 赎渎。拜托,博客联盟,别再传播这样无聊的插件好不好?

    另,“功能介绍”里还有两条:

    隐藏掉不和谐的内容,小心为上;

    隐藏掉额外内容,给留言者一个惊喜;

    我的看法是:

    1. 你要想发出“不和谐”的声音,提点不同意见,就要有这胆魄,藏头露尾只会让人鄙视!看看人家怎么操蛋的,学好了再出声不迟!
    2. 惊喜是隐藏得来的吗?惊喜是人们看到好文章自然产生的感觉。笔落惊风雨,诗成泣鬼神!别整个破玩意糊弄人就叫给惊喜好不好,拜托。

    更新:强行插入豆瓣博客验证字符串:doubanclaim027dad6b2feda0fc

    更新2:验证失败,豆瓣的认领机制真是2

  • Always Twitting – Free WordPress Theme

    Always Twitting is a newly released twitter-style WordPress theme. It is especially useful to those who are writing posts like twitting, like me. ^^ Besides, it’s simple and fresh. Take a look at the snapshot below and see if you like the appearance.

    Features include:

    • Customizable colors all around in a theme option page
    • Admin shortcuts on the homepage
    • Highlight author comments
    • Separated comments and trackbacks/pingbacks
    • And more

    Plugins supported:

    Download:

    Current version 2.7.3 of Always Twitting can be downloaded here.