WordPress疑难问题FAQ

0条评论

为什么我的日志都不见了?全都是Sorry, no posts match your criteria(对不起,没有符合要求的日志)?

清除浏览器缓存和cookies可能会解决问题。与此同时,检查search.php和index.php模板文件中是否有错误。

参见:

怎样寻找更多WordPress帮助?

除了这些FAQ文章外,还有很多渠道可以提供更多WordPress帮助。首先可以安装Codex and Forum Searcher Plugin插件,方便自己在WordPress管理面板中查找WordPress文档和论坛中的内容。点击搜索结果,页面会在新窗口或表格中打开,便于用户根据页面上的说明进行操作。

遇到CSS问题时该到哪儿寻找帮助?

下面这些文章可以帮你解决大多数CSS问题:

怎样纠正托管在Dreamhost上的WordPress 2.x版本的博客的数据统计问题?

Dreamhost中有一篇wiki文章解答了这个问题——Making stats accessible with htaccess

启用referrer功能时为什么会有错误信息?

保存日志时如果遇到这个问题,请前往管理面板>设置>常规中检查WordPress地址(URI)和博客地址(URI),两者都不应使用'www'。例如,应将http://www.sample.co改为http://sample.com。这个问题最初可见于http://wordpress.org/support/topic/72235

参见:

在MySQL 4.1.7上使用WordPress有问题吗?

参见:可以在Windows 2000上安装WordPress吗?

如何清空某个数据库表?

参见:

怎样修正SQL/DB Error errcode 13 Can't create/write to file错误?

问题描述:用PHP访问MySQL时,MySQL变量tmpdir被设置成一个无法被写入的目录。

要解决这个问题,可从命令行中进入MySQL,输入show variables;

在输出的一长列数据中会看到这样一行代码:tmpdir = /somedir/(这里是我们设置的内容)

解决方案:更改tmpdir变量,使之指向一个可写入的目录。

步骤

1. 找到my.cnf文件。在*nix系统中该文件通常在/etc/

2. 在简单的文本编辑器中打开该文件,找到 [mysqld]部分

3. 在 [mysqld]部分中找到tmpdir所在行。如果该行已经被标注(即行起始部分有#符号),删除#号,将该行更改为: tmpdir = /writable/dir,其中/writable/dir是我们可以写入的某个目录名称。有时候使用/tmp,也可以使用/home//

4. 保存文件

5. 输入mysqlshutdown -u -p shutdown,关闭MySQL

6. 在MySQL文件夹中输入 ./bin/safe_mysqld &,打开MySQL。通常MySQL文件夹位于/usr/local,在Linux系统中有时则位于 /usr/中。

如果以上方法不能解决问题,并且你让其他人来管理的你WordPress博客,可以将以上内容反映给博客管理员,让他们解决问题。

怎样解决Headers already sent的警告问题?

问题描述:在浏览器中出现一个警告信息,内容如下:

Warning: Cannot modify header information - headers already sent by (output started at

原因与解决方法

这通常由开放的<?php标签前或闭合的 ?>标签后的空格、新段落等多余内容引起,尤其是在wp-config.php文件中。在其它文件中也可能出现类似情况。因此我们需要仔细查看错误信息,信息中会列出出现该错误的文件的文件名(参见下文“解析错误信息”)。最好的方法是用最近一次备份中的文件或WordPress最新版本中的文件替换相应含有错误信息的文件,如果没有可替换文件,请执行以下操作:

我们看不到任何信息并不表示PHP也看不到任何信息:

1. 下载错误信息中提到的文件

2. 在常见的文本编辑器(不是Mircosoft Word或类似文件,而是记事本、BBEdit等)中打开文件

3. 检查文件开始部分的字符是否<?php

4. 检查文件结尾部分的字符是否?>

要确保文件结尾部分没有问题,请:

1. 将光标放在 ? >之间

2. 按下键盘上的DELETE键

  • MAC用户请注意:计算机上的DELETE键会删除光标右侧的字符。

3. 继续按DELETE键

4. 保持至少15秒

5. 输入>并

6. 保存文件,不再按任何键

7. 若按下其它任何键,问题会再度出现

同时检查文件的编码方式,若文件以BOM UTF-8形式编码,BOM会被看成一个启动输出结果的字符。

解析错误信息

若错误信息的内容为: Warning: Cannot modify header information - headers already sent by (output started at /path/blog/wp-config.php:34) in /path/blog/wp-login.php on line 42,那么问题出在wp-config.php文件的第34行(line #34),而不是在wp-login.php文件的第42行(line #42)。这种情况下, line #42 of wp-login.php也是受害者,受到line #34 of wp-config.php中多余空格的影响。

若错误信息的内容为:Cannot modify header information - headers already sent by (output started at /path/wp-admin/admin-header.php:8) in /path/wp-admin/post.php on line 569,那么问题出在line #8 of admin-header.php而非#569 of post.php。这种情况下,line #569 of post.php也是受害者,受到 line #8 of admin-header.php中多余空格的影响。

使用Safari浏览器时为什么看不到可视化富文本编辑器?

问题描述:在Apple开发的Safari浏览器中无法显示可视化富文本编辑器的编辑界面(又称WYSIWYG编辑器)。

原因与解决方案

在Safari的早期版本中,加载可视化富文本编辑器的编辑界面会立即导致浏览器崩溃。这是由Safari中的bug导致,而非WordPress问题。WordPress开发人员修复无门,只得禁用了Safari用户的可视化富文本编辑器功能。令人欣慰的是,Safari用户可以通过下面三种方法来激活该功能。一是升级到Safari 3.0.4或更高版本,以及WordPress2.3或更高版本,二是换用Firefox浏览器或Camino浏览器,三是在管理面板>设置>撰写中取消“默认情况下用户可以使用可视化富文本编辑器”的选中状态(WordPress稍早版本)并安装Dean's FCKEditor For WordPress

为什么使用Safari浏览器时看不到快速标签按钮?

问题描述:使用Safari浏览器时,编辑界面上方的快速标签按钮无法显示。

原因与解决方法:在Safari的早期版本中,快速标签按钮尽管能够发挥一定作用,但效果不尽如人意。这是由Safari中的bug导致,而非WordPress问题。WordPress开发人员修复无门,只得禁用了Safari用户的快速标签按钮功能。令人欣慰的是,Safari用户可以通过下面三种方法来激活该功能。一是升级到Safari 2.0.4或更高版本,以及WordPress2.0.7或更高版本,二是换用Firefox浏览器或Camino浏览器,三是在删除/wp-admin/admin-functions.php 文件第1085行的if语句和第1092行的单词'else'(仅供WordPress早期版本)。

例如,将:

function the_quicktags() {
	// Browser detection sucks, but until Safari supports the JS needed for this to work people just assume it's a bug in WP
	if (!strstr($_SERVER['HTTP_USER_AGENT'], 'Safari'))
		echo '
		<div id="quicktags">
			<script src="../wp-includes/js/quicktags.js" type="text/javascript"></script>
			<script type="text/javascript">if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 ) edToolbar();</script>
		</div>
';
	else echo '
<script type="text/javascript">

改为:

function the_quicktags() {
	// Browser detection sucks, but until Safari supports the JS needed for this to work people just assume it's a bug in WP
		echo '
		<div id="quicktags">
			<script src="../wp-includes/js/quicktags.js" type="text/javascript"></script>
			<script type="text/javascript">if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 ) edToolbar();</script>
		</div>
';
		echo '
<script type="text/javascript">

没有接收到WordPress通过电子邮件发来的注册密码怎么办?

问题描述:用户在我们的博客上注册或更改密码时,输入用户名和电子邮件地址后,WordPress告诉用户已经将密码发送到他们的电子邮箱,但实际上用户却没有收到邮件。

原因与解决方案:WordPress使用标准的PHP邮件函数(mail function),而该函数利用邮件服务器进行工作,无需任何账号信息。如果我们的网站使用托管服务,一般不会出现接收不到邮件的问题,但如果使用自己的独立主机又没有SMTP服务器的话,就接收不到WordPress的注册密码邮件了。使用*NIX系统时,服务器上应该具备后缀或邮件服务器,我们的任务是对它们进行设置(具体步骤请Google)。如果不希望在自己的*NIX系统上设置邮件服务器,也可以使用 ssmtp—— ssmtp提供了“一种将邮件脱离系统并转向邮件中转站的安全、有效、便捷的方式”。在Windows系统上,可以尝试使用 Glob SendMail等邮件服务器模拟器。

更多帮助请见: http://wordpress.org/support/topic.php?id=24981

要使用插件的话,可以选择 Configure SMTP。该插件能够“为WordPress提供SMTP邮件服务,支持通过SSL/TLS(如GMail)发送邮件”。

Windows主机用户请注意:使用Configure SMTP插件可以避免无法接收邮件的情况发生。

另一种解决方法是编辑wp-includes中的class-pop3.php文件,该文件中有一个可对smtp服务器进行硬编码的变量$MAILSERVER。但尤其是在用户注册时,根目录下的wp-php.php文件实际上会根据作者的设置进行循环并得出一个值,用这个值来设置电子邮件发送人地址与默认的管理员(接收人)地址。

如果我们的管理员邮件地址是有效的,上面的方法会达到很好的效果。例如,如果管理员电子邮件地址为: admin@"网站名称.com",SMTP服务器必须为smtp."网站名称.com"。如果网站名与邮件地址不匹配,邮件将无法发送。(虽然SMTP服务器不需要经过验证,但大多数虚拟主机会要求检查进入的SMTP流量是否有效,避免垃圾评论。)

使用wpPHPMailer插件也可以达到同样效果,同时插件还提供了一个硬编码邮件发送人地址的选项。

怎样寻回快速标签<!--nextpage-->?

出于一些原因,<!--nextpage-->快速标签被从1.5.1中“删除”了。要找回这项功能,只要进行以下操作:

在WordPress 1.5.x中

在文本编辑器中打开wp-admin/quicktags.js文件,定位到以下区域(起始位置为第135行):

/*
edButtons[edButtons.length] =
new edButton('ed_next'
,'page'
,'<!--nextpage-->'
,''
,'p'
,-1
);
*/

删除 /* 和*/ 之间的代码行,取消对该代码块的注释。之后快速标签按钮就会出现在编辑界面上了。

在WordPress 2.0.x中

在文本编辑器中打开 wp-includes/js/quicktags.js文件,定位到以下区域(起始位置为第135行):

//
edButtons[edButtons.length] =
new edButton('ed_next'
,'page'
,'<!--nextpage-->'
,''
,'p'
,-1
);
//

删除第一行和最后一行//,取消对该代码块的注释。

接下来在文本编辑器中打开'wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js文件,定位到以下区域(起始部分为第15行):

var buttons = '<a href="javascript:tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpressmore\')" target="_self" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpressmore\');return false;"><img id="{$editor_id}_wordpress_more" src="{$pluginurl}/images/more.gif" title="'+titleMore+'" width="20" height="20" class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" onmouseout="tinyMCE.restoreClass(this);" onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" /></a>';
// Add this to the buttons var to put the Page button into the toolbar.
// '<a href="javascript:tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpresspage\')" target="_self" onclick="javascript:tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpresspage\');return false;"><img id="{$editor_id}_wordpress_page" src="{$pluginurl}/images/page.gif" title="'+titlePage+'" width="20" height="20" class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" onmouseout="tinyMCE.restoreClass(this);" onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" /></a>';

复制第17行两个单引号之间的内容并粘贴到第15行结尾部分前,如下所示:

var buttons = '<a href="javascript:tinyMCE.execInstanceCommand(\'{$editor_id}
\',\'mcewordpressmore\')" target="_self" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}
\',\'mcewordpressmore\');return false;"><img id="{$editor_id}_wordpress_more" 
src="{$pluginurl}/images/more.gif" title="'+titleMore+'" width="20" height="20" 
class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" 
onmouseout="tinyMCE.restoreClass(this);" 
onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" /></a> <a 
href="javascript:tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpresspage\')" 
target="_self" onclick="javascript:tinyMCE.execInstanceCommand(\'{$editor_id}
\',\'mcewordpresspage\');return false;"><img id="{$editor_id}_wordpress_page" 
src="{$pluginurl}/images/page.gif" title="'+titlePage+'" width="20" height="20" 
class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" 
onmouseout="tinyMCE.restoreClass(this);" 
onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" /></a>';

这样快速标签<!--nextpage-->也会出现在编辑页面上。之后再进行一项操作,也可以激活<!--nextpage-->的快捷键。在文本编辑器中打开 'wp-includes/js/tinymce/plugins/wphelp/editor_plugin.js文件,注意:该文件与上一步骤中打开的文件虽名称相同,但路径不同,因此不是同一文件。在文件中定位到以下区域(第23、24行):

+ '<input type="button" accesskey="t" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpressmore\');" />'
+ '<input type="button" accesskey="u" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'Undo\',false);" />'

复制第23行代码并粘贴到23行下,作为一个新行,按以下方式编辑:

+ '<input type="button" accesskey="t" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpressmore\');" />'
+ '<input type="button" accesskey="p" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mcewordpresspage\');" />'
+ '<input type="button" accesskey="u" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'Undo\',false);" />'

为什么在日志中使用 <!--nextpage-->快速标签却没反应?

在WordPress的Classic等主题中, <!--nextpage--> 快速标签运行正常,但在WordPress的Default等另一些主题中,查看日志时却会看到分页符。这时就有必要修改当前主题的模板文件page.php或index.php,激活<!--nextpage--> 功能。需要在文件中加入以下内容:

<?php wp_link_pages(); ?> ?

MySQL Error 28

有时会看到这样的错误信息:

Error code 28: No space left on device  

这是一个MySQL错误,和WordPress没有直接关系;发现类似错误时我们需要联系虚拟主机商来解决问题。有些用户反映,运行PhpMyAdmin中的“repair table(修复表)”可修正该错误。

Error 28以及避免错误出现的方法:

遇到Error 28错误时,请检查所有运行MySQL的文件系统。如果之前根据推荐将数据目录(datadir)、临时文件目录(tmpdir)和日志文件都分散成专用的文件系统,那么现在会涉及多个文件系统。此外还需要注意MySQL经常会为一些查询创建临时数据库表。大多数临时表会被存储在tmpdir中;尽管如此,有时一些临时表也会出现在数据库文件中(如ALTER TABLE)。最后还要注意MySQL需要充足的免费硬盘空间。

出现Error 28的原因可能是:

  • /tmp(临时文件所在文件夹)容量不足,或
  • /tmp文件夹中文件数量过多(即使文件夹中仍有足够内存)

WordPress论坛上的相关讨论:

引号为什么会被忽略或者不被忽略?

编写插件或使用 RunPHP等插件时,以及设计自定义模板时,实际上是在对数据库中的数据打交道。WordPress会为用户管理这些数据,使之能够立即投入使用。但偶尔也会出现一些意外情况(即使不使用WordPress,直接在数据库中进行操作时也会遇到类似情况)。

例如,引号不能直接存储在MySQL数据库中。MySQL以SQL语言方式处理引号。若用户在某篇日志中使用引号,当日志被保存入数据库时,日志中每个引号都会被MySQL忽略。MySQL会预先用反斜线符号来代替这些引号,表示紧跟其后的字符应被看做输入内容的一部分,而非SQL命令的一部分。

假设我们要在日志中添加以下内容:

...an article about "Happiness" is at 
<a href="http://example.com/happy" title="Happiness">Happiness</a>
if you would like to read it...

导入到数据库后,相应代码为:

...an article about \"Happiness\" is at 
<a href=\"http://example.com/happy\" title=\"Happiness\">Happiness</a>
if you would like to read it...

将数据库中的数据显示在页面上时,有时反斜线符号无法自动消失。这时我们可以在页面上使用PHP函数 stripslashes()

为什么提交评论后看到的是空白页面?

问题描述:当有人提交对某篇日志的评论时,浏览器窗口突然变成空白页面,看上去好像WordPress没能够识别到这次评论。

原因与解决方法:评论者所用主题中评论表的关键部分丢失,导致WordPress无法识别所提交评论应指向的日志。这时需要检查主题的comment.php文件,保证评论表中具备以下代码:

<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />  

WordPress论坛上的相关讨论:

怎样在无法访问管理界面的情况下禁用所有插件?

有时我们可能需要禁用所有插件,但却不能在管理界面中禁用这些插件。我们可以通过下面这两个方法来禁用所有插件:

  • 使用PhpMyAdmin
    • 在wp_options表的option_name列下,找到active_plugins行
    • 将option_value的值改为:a:0:{}

  • 新建一个空的插件文件夹
    • 通过FTP或虚拟主机的控制面板,进入wp-contents文件夹
    • 通过FTP或虚拟主机的控制面板,将插件文件名plugins重命名为plugins.hold
    • 通过FTP或虚拟主机的控制面板,创建一个新文件夹并命名为plugins
    • 登录WordPress管理界面
    • 通过FTP或虚拟主机的控制面板,删除之前创建的空白plugins文件夹
    • 通过FTP或虚拟主机的控制面板,将plugins.hold重命名为plugins

自动升级后,怎样清空“Briefly unavailable for scheduled maintenance(博客正进行定期维护,暂时无法访问)”信息?

WordPress在博客的的根目录(包含wp-admin文件夹的目录)中存放了一个名为.maintenance的文件,作为自动升级的一部分。如果我们的博客根目录下有.maintenance文件,我们的访问者就会看到“博客正进行定期维护,暂时无法访问”。片刻之后就能够正常访问了。

如果不希望访问者看到类似信息,可以删除.maintenance文件并再次运行自动升级程序,唯一需要注意的是,自动升级程序有时会中途出错。

WordPress 2.7新增了核心自动升级功能。

使用Pretty Permalinks时怎样修正404错误?

如果在使用Pretty Permalinks (如在管理面板>设置>固定链接中选择日期和文章名作为默认链接形式)时出现404错误,可能是因为没有安装mod_rewrite模块或模块没有被激活。解决方法是在Apache web服务器中激活mod_rewrite。在apache\conf\httpd.conf文件中找到`# LoadModule rewrite_module modules/mod_rewrite.so一行,删除行起始部分前的#号。最后重启Apache。注意:激活mod_rewrite需要虚拟主机商的配合。

参见:

使用WordPress固定链接

WordPress论坛上的相关讨论:

为什么编辑日志时WordPress没有将管理员账号列为作者?

目前还无法确定这个问题的起因,但可以试着用下面的方法来解决问题:

通常这样可以使管理员账号出现在作者列表中:

1. 新建一个角色为管理员的管理用户(可起名为newadmin)

2. 以newadmin为用户名登录

3. 将之前的admin用户降级为订阅者并保存

4. 再将之前的admin用户级别提升为管理员并保存

5. 以之前的admin身份登录

如果上述方法无效,可尝试以下方法:

1. 新建一个角色为管理员的管理用户(可起名为newadmin)

2. 以newadmin为用户名登录

3. 删除之前的admin用户,将其日志作者指定为newadmin

4. 新建一个角色为管理员的用户并命名为admin

5. 以admin为用户名登录

6. 删除用户newadmin,将其日志作者指定为admin

博客上日志的作者显示有误是什么原因?

该问题的解决方法同上一个问题:为什么编辑日志时WordPress没有将管理员账号列为作者?

WordPress出了新版本,但为什么我的博客没有接收到升级提醒?

WordPress发布新版本时,用户博客管理面板最上方会显示WordPress X.X.X 可用!请现在升级
这样的升级提醒。不是所有博客都能在同一时间接收到WordPress的升级提醒。WordPress博客每十二小时检查一次升级信息,循环周期相同,循环起始时间却不尽相同。所以如果你的博客刚好在新版本发布前几分钟检查过一次升级信息,那么就只有等到12小时后你的博客才会再次检查升级信息,那时候你就会看到WordPress的最新升级提醒了。

如果希望博客立即检查升级信息,可删除wp_options数据库表中的update_core选项名称记录。注意:插件和主题都有各自的升级信息检查周期,分别由wp_options中的update_pluginsupdate_themes决定。

WordPress论坛上的相关讨论:

为什么最近一次自动升级后,我对WordPress的Default主题所做的自定义修改全都不见了?

核心升级会用新版本中的新文件覆盖旧版本中的文件,因此即使之前曾经修改了WordPress主题Default中的文件(如wp-content/themes/default/style.css),这些文件也会被新版本的同名文件覆盖。

请注意,核心升级只会涉及 wp-admin/includes/update-core.php中规定的文件。 wp-admin/includes/update-core.php中没有列出的文件,以及新发布版本中没有的文件都会被保留下来。

注意,无论是自动升级还是手动升级前,都要记住备份WordPress文件和数据库,这一点在备份WordPress中有说明。

参见:

如何修复MySQL数据库表?

每隔一段时间都应该对MySQL数据库表进行修复。根据dev.mysql.com上关于修复数据库表的文章,需要修复数据库表的理由很多,其中包括“tbl_name.frm被锁定,无法修改”、“找不到tbl_name.MYI (错误编码:nnn)文件”、“文件结尾部分不合要求”、“Record文件遭到破坏”或“数据库表处理器出现nnn错误”。

下面是用PhpMyAdmin修复MySQL数据库表的步骤:

1. 登录虚拟主机账号

2. 登录PhpMyAdmin

3. 选中需要修复的表所在数据库。如果只有一个数据库,系统默认选择该数据库,因此用户无需再次选定。

4. 在主面板中会看见数据库表的列表。点击需要修复的表前的复选框。

5. 在窗口最下方即列表下方,有一个下拉式菜单,在其中选择“Repair Table(修复表)”

无论何时,用户都应保留当前数据库的备份。

参见: