Becomin' Charles

算法 | LNMP | Flutter | Mac

Becomin' Charles

开发一个WordPress插件的一个更重要的方面,是你怎样设计它的结构。本文将研究几个关于设计插件结构的提示,以帮助你组织你的插件资源,避免名字冲突。每一个插件作者的插件的结构都不尽相同,所以这些提示只是我的个人偏好。我将首先简单地描述一下一个WordPress插件是怎样工作的,然后介绍一个插件的结构。

WordPress插件怎样工作

在将一个插件放入到wp-content/plugins/目录后,插件应该自动的处于可以安装的状态

当一个插件被“启用”,等同于告知WordPress将你的代码装载到“每”个页面(包括管理页面)。这也就是为什么当你启用了很多的插件的时候,你的WordPress可能非常慢的原因,这是由它所引入的代码的量决定的。

阅读全文 »

如果你已经被说服而想要研究一下创建你自己的WordPress插件的可能性,那么找到一个可以让你开始行动的一个创意可能是非常困难的。幸运的是,有很多地方可以让你找到开发你自己的插件的灵感。在本文中,我会罗列好几个方法使你可以找到开发你自己的WordPress插件的创意。

倾听你的读者

你的读者是你获得插件创意的宝库。比如说,一个读者可能需要一个简单的方式来回复或者编辑评论。因为博客的读者是使用你博客最多的人,他们往往对于你的博客还缺乏哪些功能有着独特的洞察力。就在那天,我的一个读者请求我能不能让评论在发布前可以预览一下。幸运地是已经有一些插件可以提供这个功能了,但是有时候,你的读者会建议一些还没有被插件实现的功能。

阅读全文 »

Updated:2008-6-2 17:11:15

当初,我装过一个插件,就是把这里发布的博客自动发送到某个邮箱。那个时候,我选择的邮箱是Blogger。想起来有这回事,遂去Blogger看了看,竟然真的有一些的。

但是因为这个插件的某些问题(如通定时发布的日志无法自动发送),并不是每篇日志都被成功复制到Blogger。所以,只是又恢复了一些从4月14日到5月31日之间的非WordPress分类的文章而已。其他的数据,仍旧没有找回。

谢谢关注!
阅读全文 »

对于许多WordPress用户来说,插件是必须的。WordPress 插件使得那些只有很少或者没有编程能力的用户可以扩展他们博客的功能。插件的形式多种多样,在WordPress中,插件几乎可以做任何事情。

即便是WordPress这样一个优秀的独立应用程序,仍旧有许多方面有缺憾。用户所要求的越来越多的WordPress所应该具有的特性,都很可能被开发成插件。此外,还有很多没有实现的创意,而且,每一天还有更多的创意被提出。

在已经发布了三款插件之后(不包括我自己写给自己用的那些),我意识到了一些WordPress的局限性,我希望能够分享一些我已经学到的(我仍旧在学)关于创建WordPress插件的一些经验。最终,我将会开始写一个系列,专门讨论编写你自己的WordPress插件的过程中遇到的各种各样的问题。这个系列将会从非常基础的话题开始,并且假设你的插件知识是零基础。

这个系列是为谁准备的?

这个系列是为了任何一个好奇或者想要学习怎样编写他们自己的WordPress插件的用户撰写的。这个系列的读者应该有中级程度的PHP知识,知道一点点JavaScript,并且有相当的CSS知识。

这个插件系列将会使主题模板设计者受益,还有那些想要修补插件代码的人,还有那些想从零开始编写自己的插件的人。

阅读全文 »

一不小心,就已经很多天没有发表文章了,哎呀真是太懒了^^

其实,我也不知道写点啥好了,主要是最近的生活也没有啥值得一说的。

最近,手头的项目换了,有点乱,还没有进入状态。

很想折腾一下我的博客,但是也提不起兴致。再说也没有时间。

最近在网络上看到篇不错的文章,讲WordPress插件开发的,我打算陆续翻译出来,翻译水平有限,大家将就着看看吧。我主要是自己想学,想深入到WordPress的内部去。不过,渐渐地,我还是觉得这是个很远大的理想。我希望我能坚持住,不断的深入,再深入一点……

这里我把我翻译的原文的链接贴一下吧:
How To Write a WordPress Plugin

高中的一节美术欣赏课,我第一因为一幅画而感动了——《Stary Night》。那种炽烈的感情,那种用尽全身力量,也没有办法表达万一的那种感情,那种使得人的精神倍受折磨的感情,透过画笔,透过颜料,透过画布,再透过照片,再透过印刷的纸张……即便是那么多次的“转载”,即便穿越了百年的时间,跨越了万里的空间,那幅画背后,画家的那种挣扎,依旧清晰地向我袭来,我就是那一刹那,深深地被感动了……

我原本一直以为那种感动是由于高三时候的那种压抑的气氛,然而,后来进了大学,再次在照片上看到那幅画,现如今,实验室的师兄从阿姆斯特丹回来,从他给送我的明信片上再一次看到那幅画,那种全身电流通过的感觉,一如往昔的清晰。想必,我是真的被感动了。

电影里,Vincent那炽烈的情感,就如同我的想象一般,并没有让我有太多的吃惊,这点,我想只要是看过他的画的人,都能有同感的。我只是为他强烈的想要为社会做点什么贡献,想要自己成为有用的人的那种意愿而感到深深的敬佩。这点是之前我所没有看到,也没有想到的,原来这个大画家,竟然是这么有社会责任感的一个人。通过这部电影我才知道,原来,在凡高之前,是没有人把劳动人民和劳苦大众作为作画的对象的。这就又加深了我对他的敬佩之情。

有的时候,我又觉得非常同情他,他是个天才,他对自然,对于看到的事物有着他非常独特的理解,可是没有人能够理解他,没有人认同他。即便是那位“好朋友”高更,也没有真正理解过他。那么表姐凯理解他更是不可能的了。有时候,我想,成为一个天才,伴随着你的不一定有很多幸运,但是一定有无尽的孤独。他就是那么一个孤独的人。

另一个打动我的,是他的弟弟,提奥。我甚至觉得,没有提奥,就没有凡高。凡高穷困潦倒,基本没有独立生活能力,又从不把自己的生活当成一回事情,要是没有提奥始终如一的经济上的资助和情感上的支持,就不可能有那些让无数人感动的伟大画作。

对电影本身,我没有什么想说的,我觉得豆瓣一个网友说得挺好的,一般的电影是“电影成就了故事”,而对于这部片子,却是“故事成就了电影”。我们先为故事本身而感动,才顾得上审视这部电影怎么样。从这个角度来看,导演,演员,音乐,都是令人满意的。

阅读全文 »

Simple Tags是一款非常优秀的插件,在WordPress原生支持tags后,Simple Tags因为其强大的tags管理功能成为了一款必不可少的插件。

经历了几个版本的演化后,Simple Tags的功能已经越来越强。输出相关日志的功能最终也被集成到了其中。在Simple Tags后台页面,通过简单的设置,就可以轻易实现在Feed、帖子页中,输出相关日志。

但是,通过后台设定添加的相关日志列表不能控制其出现的位置,Simple Tags采用filter来将相关日志列表追加到了文章内容的末尾(关于filter的说明,可以参考我翻译的文档),很多WPer都会在文章末尾添加很多东西,比如版权(如本站),社会化书签,有的还有广告等等,如果相关日志列表没有出现在合适的位置,不但影响美观,还会影响用户友好。

解决办法一般就是采用专门的Related Posts插件,比如我爱水煮鱼,就提供了一个这样的插件,使用起来也相对简便。现在,大家又有一个选择了,因为,按照查理的理论,同样是直接在页面模板中插入代码,插入一行和插入三行,是完全一样的。既然这样,为什么要多安装一个插件呢?(关于效率和功能的强大与否,查理没有对比过,所以,也就没有什么发言权了,所以,这也不是非要使用这个方法的一个理由,有兴趣研究的同学,可以把你的结果告诉查理,我会把你文章的permalink,添加在本文中)。

好了,闲话已毕,我们来看正题,首先我就把那三行代码贴在这里吧,全部采用默认设置输出相关日志的话,看到这里就可以大功告成了!在你自己的模板文件的single.php(如果使用K2,那么是theloop.php)中的合适位置,加入下面的代码即可输出10篇相关日志列表,如本站效果。

1
2
3
if (is_single() && function_exists('st_related_posts')) { 
st_related_posts('number=10&include_page=false&order=data-asc');
}

简单解释一下,st_related_posts()是Simple Tags插件提供的公用函数,可以直接输出相关日志列表。

  1. **number**–输出相关文章的数量

  2. **order**–输出相关文章的排序。可选值:

    • date-asc - 旧日志在前
    • date-desc - 新日志在前
    • count-asc - 相同标签数少的日志在前
    • count-desc - 相同标签数多的日志在前(默认)
    • name-asc - 字母顺序
    • name-desc - 字母倒序
    • random - 随机
  3. **format**–不建议设定此参数,用法参见文档

  4. **separator**–不建议设定此参数,用法参见文档

  5. **include_page**–true表示包括页面;false表示不包括

  6. **include_cat**–需要包含的分类的ID,用半角逗号间隔,不设代表所有分类

  7. **exclude_posts**–不想包含的日志ID,用半角逗号间隔

  8. **exclude_tags**–不想包含的tags的ID,用半角逗号间隔

  9. **post_id**–不建议设定此参数,用法参见文档

  10. **excerpt_wrap**–不建议设定此参数,用法参见文档

  11. **limit_days**–多少天内的相关日志,不设代表所有日志

  12. **min_shared**–包含相同tag的数量,默认1(两篇文章有一个相同tag),设得越大,相关日志越少

  13. **title**–日志列表前的标题,可以使用html标签,如

  14. **nopoststext**–没有相关日志时候显示的文本。需要一个字符串,请用单引号括起来。

  15. **dateformat**–显示日期的格式,默认和WP的格式相同,想要修改的话参见PHP时间函数的参数设定格式

  16. **xformat**–扩展链接格式,默认的就很不错了,想要修改的,看文档吧,或者在Simple Tags的后台也可以设定

  17. Plugin API

    介绍

    本文当主要介绍WordPress插件开发者可以使用的API Hook,以及如何使用它们。

    本文假设您已经阅读了《Writing a Plugin》(这篇文章概览了如何写一个插件)。本文主要介绍API Hook,也称作Filter和Action,WordPress使用这些函数来使您的插件起作用。

    注意:本文的内容适用于WordPress1.2+。

    Hook,Action和Filter

    Hook是WordPress提供的一种机制,帮助您将您的插件加入到WordPress中;也即,在您的插件中,通过调用一些系统函数,使得您的插件可以运作起来。一共有两种Hook:

    1. Action:Action是WordPress内核在运行到某个特定的点的,或者某个特定的事件发生的时候执行的。您可以通过使用Action API让您的插件中的一个或者多个函数在这些特定的点执行。
    2. Filter:Filter是WordPress在将一段文本加入到数据库,或者发送给浏览器之前处理不同种类的文本用的。您的插件可以通过使用Filter API,让一个或者多个函数在这些时刻运行,以处理特定类型的文本。

    有的时候,您可以使用Action和Filter达到相同的目的。比如说,您希望你的插件可以更改一段日志的文本,您可能会往publish_post中添加一个Action函数(这段文字在被加入到数据库之前被修改了),或者往 the_content中添加一个Filter函数(这段文字在被发送给浏览器显示之前,被更改了)。

    Action

    Action由WordPress中发生的一些特定的事件所触发,比如发布一篇日志,更改主题,或者在管理面板显示一个页面。您的插件可以通过执行一个PHP函数来响应事件,实现以下几个目的:

    • 修改数据库数据
    • 发送Email信息
    • 修改将要在浏览器上呈现的内容(管理员看到的或者访客看到的)

    要达到上述的目的,需要遵循的步骤为(下文有详细的描述):

    1. 在您的插件文件中,创建一个在某个事件发生时,需要运行的PHP函数。
    2. 通过调用add_action函数,将您的函数插入到WordPress中。
    3. 将您的插件文件放到插件目录下,然后激活它。

    创建一个Action 函数

    在您的插件中创建一个Action的第一个步骤是创建一个能响应Action的函数,并且将它写入到您的插件文件里(您的插件文件最后会被放到_content/plugins_目录)。举个例子,如果您想要您的朋友在您发表了新文章的时候收到一封邮件,您可以创建下述函数:

    function email_friends($post_ID) { $friends = ‘bob@example.org,susie@example.org’; mail($friends, "sally’s blog updated", ‘I just put something on my blog: http://blog.example.com’); return $post_ID; }

    对于大多数的Action来说,您的函数要接受一个单一参数(通常是日志或这评论的ID,这要视情况而定)。有些Action接受多于一个的参数,您可以查看WordPress的Action文档,或者直接查看WordPress源代码来取得第一手资料。除了一个参数外,您还可以访问WordPress的全局变量,并且调用其他WordPress函数或者您插件中的其他函数(或者其他插件中的函数)。

    注意:您要始终留意,是否WordPress本身或者其他的插件已经使用了您想用的那个函数的名字。关于这点,您可以查看避免函数名冲突这篇文章来获取更详细的信息。

    Hook到WordPress

    当您定义好您的函数后,下一步就是将您的函数Hook或者注册到WordPress中。在您的插件文件中的全局空间中调用函数 add_action()就可以了:

    1
    2
    add_action(’hook_name’, ‘your_filter’, [priority], [accepted_args]);

    该函数中:

    • hook_name是WordPress提供的供hook用的函数名,也即您的函数将关联到的事件的名称。
    • your_function_name 是您希望在hook_name指定的事件发生时执行的函数的名称。这可以是一个在WordPress中定义好的标准的函数,也可以是一个您自己定义的函数(比如上面提到的email_friends
    • priority是一个可选的整型参数,可以指定可以指定关联到某个特定的函数的执行顺序。默认值是10。数字较小的执行较早,如果优先级相同,则按照他们hook进来的顺序先后来执行。
    • accepted_args是一个可选的整型参数,它定义了您的函数可以接受多少个参数,默认是1。这个参数很有用,因为有些事件发生的时候,可能会向您的函数传递多于一个的参数。这个参数是从WordPress 1.5.1后的版本才开始有的。

    继续前文的例子,我们可以将下面一行代码加入到插件的文件中:

    1
    add_filter(’comment_text’,'filter_profanity’);

    相似的,您也可以将一个函数从Action中移除。你可以参考移除Action来获得详细的信息。

    安装和激活

    让您的插件奏效的最后一个步骤就是安装和激活和插件了。您写好的函数和对add_action的调用,必须放到同一个文件中,插件文件必须被装到wp-content/plugins目录中。一旦插件安装好,您需要访问管理面板来激活您的插件。

    目前已有的Action Hook

    参见Plugin API/Action Reference来查看WordPress中的当前的Action列表。

    Filter

    Filter是在WordPress执行过程中,传递数据时,在对数据采取某种行动(将数据写入到数据库或者发送给访客的浏览器)之前执行的。(当WordPress生成页面时)Filter就位于数据库和浏览器之间,(当WordPress向数据库添加日志和评论时)Filter就位于浏览器和数据库之间。WordPress中的绝大多数的输入和输出过程都要通过至少一个Filter。WordPress自己有一些默认的Filter,您可以在插件中使用自己的Filter。

    将您自己的Filter添加到WordPress中,遵循以下几个步骤:

    • 创建一个PHP函数来过滤数据。
    • 通过调用add_filter将这个Filter添加到WordPress中。
    • 将您的PHP函数写入到一个插件文件中,激活它。

    创建一个Filter函数

    一个Filter函数把未经修改的数据作为输入,返回修改过的数据(或者有的时候返回的空值,表明这些数据应该被删除)。如果您的Filter没有修改数据,那么原始的数据必须被返回回去,以便于后续的插件可以继续它们的修改工作。

    所以,在您的插件中创建一个Filter的第一步,就是创建一个PHP函数来执行过滤动作,并且,将这个函数写入到您的插件文件中去。再举个例子,如果您需要确定您的日志或者评论中没有出现违禁词汇,您可以定义一个全局变量,里面包含了全部的违禁词汇的列表,然后创建下面的PHP函数:

    function filter_profanity($content) { global $profanities; foreach($profanities as $profanity) { $content=str_ireplace($profanity,’{censored}’,$content); } return $content; }

    注意:同样要小心您的函数的命名,不要和其他的WordPress函数和其他插件的函数冲突。

    将您的Filter Hook到WordPress

    在您的函数定义完毕后,下一步就是将您的函数”hook”或者说注册到WordPress中。在您的插件文件中,调用add_filter函数:

    add_filter(’hook_name’, ‘your_filter’, [priority], [accepted_args]);

    其中:

    • hook_name 是WordPress提供的供hook的函数的名称,定义了您可以加入您自己的Filter的插入点。
    • your_filter是您的filter函数的名称。这个函数可以是一个WordPress标准PHP函数,也即在WordPress内核中定义的函数,也可以使一个您自己定义的函数。
    • priority是一个可选的整型参数,标明了注册到某个特定的filter中的函数的执行顺序。默认是10。较小的数字执行时较靠前。如果priority值相同,那么按照注册的先后顺序来执行。
    • accepted_args是一个可选参数,用来标明您的函数能够接受的参数的个数,默认是1,某些hook可以像您的函数传递超过一个的参数。

    继续上面的例子,您可以使用下面的代码,让WordPress过滤您评论中的违禁词汇:

    add_filter(’comment_text’,'filter_profanity’);

    您也可以使用remove_filter()函数来将一个Filter移除。

    安装和激活

    最后一个步骤就是使您的filter运作起来。你需要做的就是将您的插件文件放到_wordpress/plugins_目录,然后到后台管理界面激活。

    目前WordPress中可以注册的Filter

    参见Plugin API/Filter Reference。

    例子

    下面是一个例子,是Ozh曾经在邮件列表中描述过的,该插件修改(或者说覆盖)了默认的bloginfo()函数。这需要修改内核函数的行为。

    add_filter(’bloginfo’, ‘mybloginfo’, 1, 2); add_filter(’bloginfo_url’, ‘mybloginfo’, 1, 2);

    function mybloginfo($result=”, $show=”) { switch ($show) { case ‘wpurl’: $result = SITE_URL; break; case ‘template_directory’: $result = TEMPL_DIR; break; default: } return $result; }

    移除Action和Filter

    在某些情况下,您可能会发现,您的插件需要禁用WordPress中的内建Action或者Filter之一,或者某个其它插件添加的函数。您可以通过调用remove_filter(’filter_hook’,'filter_function’)或者 remove_action(’action_hook’,'action_function’)来达到目的。

    比如,remove_action(’publish_post’,'generic_ping’);可以在您发表日志的时候,阻止您的博客向外发送ping。

    注意,如果一个hook不是使用默认的优先级(priority)注册到系统中,那么您必须在remove_action()中指定那个hook使用的优先级。一般来说还要注意,除非您很清楚那个函数在干什么并且为什么要那么做,请不要移除任何函数。

    缺省加载的Filter和Action

    最可靠的获知WordPress缺省加载了哪些Filter和Action的方法就是在其源代码中搜索add_filteradd_action函数的调用。

    WordPress 2.1

    在WordPress2.1中,绝大多数的Filter和Action的加载是在_wp-include/default-filters.php_文件中进行的。其他的在下列的文件中加载:

    • wp-admin/admin-ajax.php
    • wp-admin/admin-functions.php
    • wp-admin/custom-header.php
    • wp-admin/edit.php
    • wp-admin/index.php
    • wp-admin/options-permalink.php
    • wp-admin/upload-functions.php
    • wp-admin/upload.php
    • wp-includes/bookmark.php
    • wp-includes/general-template.php
    • wp-includes/kses.php
    • wp-includes/plugin.php
    • wp-includes/rewrite.php
    • wp-includes/template-loader.php
    • wp-includes/theme.php

    WordPress 2.5

    (以后我会完善这个部分)

    您可以覆盖的函数

    除了使用hook(action和filter),另一个插件修改Wordpress行为方式是覆盖WordPress的函数。实际上,有一小组函数,是WordPess希望被插件覆盖的。在所有的插件都已经启动后,如果他们还没有被覆盖的话,WordPress才启动这些函数。

    这些函数在_wp-include/pluggable.php_文件中定义。这里有一个列表(WP2.1)。

    • set_current_user
    • wp_set_current_user
    • wp_get_current_user
    • get_currentuserinfo
    • get_userdata
    • update_user_cache
    • get_userdatabylogin
    • wp_mail
    • wp_login
    • is_user_logged_in
    • auth_redirect
    • check_admin_referer
    • wp_redirect
    • wp_get_cookie_login
    • wp_setcookie
    • wp_clearcookie
    • wp_notify_postauthor
    • wp_notify_moderator
    • wp_new_user_notification
    • wp_verify_nonce
    • wp_create_nonce
    • wp_salt
    • wp_hash

    WordPress 可以说是我看到的最好的博客程序了,安装简便,扩展性强,升级非常方便,无疑是建立个人博客或者小型网站的最佳选择。但是,每一个事物都尤其弱点,即便近乎完美的WordPress也是如此。WordPress最大的弱点就是过多地依赖了数据库,可以说WordPress所有的数据都存放在数据库里,如果数据库一旦崩溃,用户就会遭受毁灭性损失。

    不过,我们运气非常好,WordPress选用的数据库是久经考验,功能强大的MySQL。而为了防止服务器出现故障,造成数据丢失,我们只有通过不断地备份自己的数据来弥补WordPress在这方面的不足。

    备份方法有很多。

    第一招,WP-DBManager,这无疑是最好的选择了,非常的方便,通过该插件,可以优化、修复、备份、恢复数据库,可以有效管理备份文件,删除空表(插件留下的遗物)。说了这么多,最关键的好处是自动备份和自动优化。按照自定义的时间表把数据库备份文件发送到你的email。本站网友stephen花生,都曾得益与此插件的功能呢。 但是呢,我要说,不是所有人都有福气使用这个插件的,这个插件需要MYSQL Dump和passthru()、system()、exec()等PHP函数的支持。(system函数和exec函数可以执行shell命令,是非常强大的php函数,强大往往是双刃剑,也就意味对安全有一定的威胁,所以有些服务器提供商会禁止调用这样的函数,一了百了,干脆连门都堵了,也省得设立什么门禁了,麻烦,盘古就是这么做的,所以我是无福之人了~~)如果你自己不知道服务器支持不支持,那么装上一试便知,如果它告诉你不能用,那就是不支持了。

    第二招,使用PHPMyAdmin,这个就是专门的管理MySQL的一个PHP界面,非常强大,非常不友好(是的,我没写错,真的很不友好,至少我用不来),如何使用这个东西做备份呢,请看这里,看图识字吧XDJM们,我暂时还比较懒,不想去翻译这个文章,遗憾的是文档中文计划里面也没有翻译的,如果你不懂英文,那么请跳过这段吧。通过phpmyadmin,可以将数据备份成一个sql文件,什么是sql文件呢,就是一系列的sql命令,通过这些命令,可以活生生建立一个数据库,而且还是塞满了数据的,猛吧。一半虚拟主机提供商都会提供这个phpmyadmin比较常见的后台如cPanel和DirectAdmin都有这个东西的。

    第三招,我最喜欢的其实是这招,就是WP后台“管理”里面的“导出”。这个功能可以将文件导出成xml格式,xml格式可是一个非常美丽的格式,导出的东西用途也非常多,我们仅提一下其备份的用途吧。这个功能随着WP的不断升级已经日趋完善了,今天我实验了一下,竟然连tag也可以完美地导出了(以前导出再导入,tag会全变成数字,非常恶心,现在没有这个问题了),导出的文件包含所有的文章,分类,评论,标签,页面等等一应俱全,然后再用导入,就可以完全重新恢复wordpress的数据了。(似乎没法导出插件生成的数据,比如很多模板和插件都会在数据库里面记下些东西的,如果用这个备份,就都没法保留了,所以这是个只关心数据的备份方法)此方法最大的好处是只通过wp后台就可以实现,不需要任何额外的手段,对于很多BSP上的WordPress博客来说,这是备份数据的很好方法,比如yo2,七十二松,wordpress.com,wordpress.com.cn等等,都是WordPress博客提供商。不过,这个方法的局限性也是非常大的,wordpress导入功能限制了文件的尺寸为2M,也即超过了,就无法导入,如果你的博客字很多的话,可能这个方法备份的文件没法完全导入(大概在100万字那个数量级的吧)。不过,如果按照作者来导出,可以把导出文件变小,今天在Weblog Tools Collection看到,已经有人按耐不住要写一个插件,可以允许按照天导出,按照分类导出等等功能了,那样,基本就无敌了,等着吧大家。

    备份,绝对是安全,而且无敌的招数,一旦出错,恢复即可。

    我在恢复的方面,只有一点心得(也是从某个网友那里看来的,就在最近,忘了是谁,不好意思,^_^),就是有时候,WordPress不知道出于什么原因,就会运转不正常,我以前碰到过的,比如首页莫名其妙老是运行超时,这个时候,我们往往会重装。重装的时候有个小技巧,大家如果碰到了可以试一试(前提是你有很完备的备份,否则出错了,你就没救了),就是在重装WP,其实不用重新上传,也不用删掉数据库重建,只要把wp_options表删掉就可以了,wp_users表也是可以删掉的,如果没删掉,重装的wordpress就不会给admin生成密码,保留原来密码。期间产生的Warning不要害怕,影响不大。这样的好处是非常省时间,几乎20s就可以完成了(说明毁灭比创造简单),如果效果不佳,再用前文说的备份恢复也不迟。