精通WordPress设计与开发:第2章 代码概览

本章内容

  • 下载WordPress
  • 配置wp‐config .php和.htaccess
  • 探索wp - content目录
  • 开启WordPress维护模式

WordPress是一个由一组执行系统内特定任务的源代码文件组成的软件包。理解代码,包括文件和文件夹结构,是理解WordPress如何作为一个整体工作的关键。

阅读本章后,您将熟悉如何下载和分析WordPress文件系统。本章还讨论了WordPress关键文件的配置,包括功能强大的wp‐config.php和.htaccess文件。还涵盖了WordPress中一些高级的配置选项。

下载

安装WordPress的第一步是下载运行WordPress所需的源文件。本节将深入探讨WordPress的核心。

下载地址

你可以通过访问位于http://wordpress.org/download/的下载页面,直接从WordPress.org下载最新的稳定版本。

你也可以在当前安装的WordPress中,通过“仪表板”界面下的“更新WordPress”部分直接更新。点击下载按钮下载最新版本的WordPress到你的电脑。

WordPress还提供了Subversion(SVN)访问。Subversion是一个免费的开源版本控制系统。WordPress使用Subversion来管理文件和目录以及对相关更改。你可以通过查看http://core.svn.wordpress.org/trunk/下载最新的WordPress源代码。

SVN trunk目录中包含了正在开发的WordPress的版本。通常这个版本的WordPress包含bug,用于测试目的。不推荐使用trunk版本的WordPress搭建网站。SVN是开发者开发WordPress core (内核)的开发工具之一。使用SVN,可以创建并提交补丁文件,以便将其包含到WordPress核心中。第16章详细介绍了这一点。

Git是另一个非常流行的源代码管理系统。许多开发者(不仅仅是WordPress社区的开发者)已经从SVN转向Git进行版本控制,因为Git提供了许多优于SVN的好处。WordPress核心团队已经为WordPress核心开发建立了一个Git镜像。执行命令Git clone Git://develop.git.wordpress.org/进入Git库。有关Git和WordPress核心开发的更多信息,请访问http://make.wordpress.org/core/2014/01/15/git‐mirrors‐for‐wordpress/

SVN和Git存储库被认为是相等的,所以如果你计划使用WordPress核心,你可以使用你最熟悉的版本控制系统。

可用的格式

WordPress软件的默认下载的是在一个名为latest.zip的压缩文件。你也可以把WordPress压缩到一个名为latest.tar.gz的压缩文件中。归档文件中的文件内容没有区别,只是使用的压缩方法不同。

你可以直接从这些url下载zip和tar文件:

➤http://wordpress.org/latest.zip
➤http://wordpress.org/latest.tar.gz

这些下载链接永远不变。每个新版本的WordPress在tag的时候都会自动压缩并保存在这个位置。当你将存档文件保存到你的电脑上时,你最好将文件重命名为包含WordPress版本号的文件,例如WordPress‐4.1.zip,这将帮助你记住你保存到你的电脑上的WordPress版本。

发布版本归档

WordPress.org提供了一个发布版归档。从0.71版本开始,每个版本的WordPress都有一个可下载的存档列表。归档包位于:http://wordpress.org/download/release‐archive/

请记住,只有最新版本的WordPress是积极维护的,所以这些下载更多的是参考而不是实际使用。“积极维护”意味着对活动分支进行安全、性能或可靠性问题的关键修复,而不是对以前的版本进行追溯。如果你需要修复,你需要升级你已经安装的WordPress版本。

这些旧版本的WordPress的另一个重要用途是将网站还原到以前的版本。例如,如果你将一个非常旧的WordPress版本升级到最新的稳定版本,并遇到了问题,你可以轻松地下载网站最初运行的旧版本并恢复到原来的版本。发布档案还提供了WordPress测试版和候选版本的下载功能。我们很高兴看到WordPress作为一个软件平台整体在不断成长。

如果你需要更新一个旧版本的WordPress,它的发布归档也很有用。只需将网站的WordPress源代码与发布归档中的相同版本的WordPress源代码进行比较,就会发现任何不同之处或核心漏洞。

目录和文件结构

WordPress源代码具有许多不同的PHP、JavaScript和CSS代码文件。每个文件在WordPress中都有特定的用途。开源软件的美妙之处在于,所有的代码都是公开可用的,这意味着你可以轻松地探索代码,更好地理解WordPress是如何运行的。学习WordPress最好的资源就是WordPress软件本身。

下载解压WordPress后,会看到WordPress的文件结构,如图2-1所示。

WordPress默认有三个目录:wp‐admin, wp‐content, wp‐includes。核心文件是wp-admin和wp-includes目录下的所有文件,以及WordPress根目录下的大部分文件。wp‐content目录包含所有的自定义文件,包括主题、插件和媒体。这个目录包含控制WordPress中内容操作和表示的代码。WordPress HTML内容(如页面和文章)与元数据(如标签和类别结构)一起存储在MySQL数据库中,这两者都将在第6章详细介绍。

修改任何WordPress核心文件都可能导致网站不稳定。例如,对仪表板或登录功能进行一个无害但执行得很糟糕的更改,就会让你的WordPress安装无法管理。核心更改也使更新WordPress变得非常困难,因为所有的更改都会在更新版本的WordPress安装后被覆盖。正如在前一节中所讨论的,关键补丁WordPress核心只在当前分支,所以如果你被迫更新WordPress安全补丁,核心文件有可能被覆盖,你要祈祷任何核心代码的更改不会和你原来希望更改冲突。当你不改变核心文件时,随着时间的推移保持你WordPress安装的完整性和稳定性会变得简单得多。

WordPress配置

WordPress有一些特定的文件,可以根据不同的目的进行编辑。这些文件可以改变WordPress的功能。在发布到服务器之前,一定要在开发环境中测试更改。本节介绍了数据库连接、存储FTP信息、启用调试工具等使用wp‐config.php的内容。它还涵盖了.htaccess文件的强大功能,包括增加PHP内存限制和最大上传大小,创建重定向,以及设置访问限制。

wp‐config.php文件

WordPress中最重要的文件是wp‐config.php文件。这个文件包含访问MySQL数据库的所有数据库连接设置,包括数据库名称、用户名和密码。这个文件还存储额外的数据库和其他高级的WordPress设置。wp‐config.php文件最初命名为wp‐config-sample.php。将文件重命名为wp‐config.php是安装WordPress的第一步。

wp‐config.php文件通常存储在WordPress的根目录下。或者,你可以把wp‐config.php文件从WordPress根目录移到父目录。所以如果你的WordPress目录在这里:

/public_html/my_website/wp-config.php

你可以安全地把文件移到这里:

/public_html/wp-config.php

WordPress首先在根目录下查找wp-config.php文件,如果找不到,就在父目录下查找。这是自动发生的,因此不需要更改任何设置就可以工作。

将wp‐config.php从WordPress根目录中移出是一个很好的安全措施,这使得它几乎不可能从web浏览器访问这个文件。

WordPress中的一些选项被保存为常量,可以在wp‐config.php文件中看到。这些常量都有相同的格式:

define('OPTION_NAME', 'value' );

OPTION_NAME是正在设置的常量选项的名称;Value是选项值,可以更新为你想为该选项保存的任何设置。当向wp‐config.php文件中添加新选项时,重要的是将选项添加到以下行之前:

/* That's all, stop editing! Happy blogging. */

如果你的WordPress安装在连接数据库时出现问题,这往往是你第一个遇到问题的地方。如果你收到错误消息“错误建立一个数据库连接”,首先要做的是验证数据库服务器的db_name, db_user,和db_password选项是否正确设置。还要验证DB_HOST名称是否设置为服务器的正确主机。通常,这被设置为localhost,但是一些托管公司将WordPress包配置为不同机器上的web服务器和MySQL服务器,需要一个特定于主机公司的配置选项来定位MySQL数据库。请联系您的主机技术支持或咨询他们的在线文档,在这里设置正确的主机值。

您可以通过更改db_charset选项值来更改数据库字符集(charset)。默认情况下,它被设置为utf8 (Unicode UTF‐8),它支持任何语言,并且几乎总是最好的选择。

从WordPress 2.2开始,DB_COLLATE选项允许指定数据库排序,也就是字符集的排序顺序。(字符是一种语言中表示字词的符号集合。排序规则决定在对字符集排序时使用的顺序,通常是字母顺序。)默认情况下,该选项为空白,通常应该保持这种状态。如果你想更改数据库排序,只需为你的语言添加适当的值。那应该在安装WordPress之前改变这个选项。在安装后更改这个值可能会导致WordPress出现问题。

WordPress的安全性可以通过在wp-config.php文件中设置密钥来加强。密钥是一个散列盐(hash salt),通过在你设置的密码中添加随机元素(散列盐 hash salt),使你的站点更难被破解。这些密钥并不是WordPress正常工作所必需的,但是它们为你的网站增加了额外的一层安全防护。

要想自动生成密钥,请访问WordPress.org在wp‐config.php文件中生成密钥的链接(https://api.wordpress.org/secret‐key/1.1/salt/),如图2-2所示。或者,你可以只输入一堆随机字符来代替“把你的独特的短语放在这里”。我们的目标是使用100%随机且唯一的密钥。

你可以在任何时候添加或更改这些键;唯一会发生的事情是所有当前的WordPress cookies将会失效,你的用户将被要求重新登录。php包含的另一个安全特性是为WordPress定义数据库表前缀的能力。默认情况下,该选项值被设置为wp_。你可以通过将$table_prefix变量值设置为任意前缀来改变这个值,如下所示:

$table_prefix = 'lecter_';

如果黑客能够使用SQL注入攻击来利用你的网站,这将使他们更难猜出你的表名,并且很可能完全阻止他们进行SQL注入。将表前缀设置为唯一值还可以在单个数据库中运行多个WordPress安装。如果你想在安装了WordPress之后更改表前缀,你可以使用change DB Prefix 插件 (http://wordpress.org/plugins/db‐Prefix‐change/)来完成。但是,在此之前请确保进行了备份。

wp‐config.php文件还包含本地化WordPress安装的选项。WordPress有内置的功能,可以在许多不同的语言中使用。设置WPLANG选项值将设置WordPress使用的默认语言。wp‐content/languages选项必须安装对应所选语言的MO(机器对象)文件才能工作。MO文件是压缩的PO(可移植对象 portable object)文件,它包含WordPress消息和特定语言的文本字符串的翻译。MO和PO文件是GNU“gettext”子系统的组成部分,它是WordPress多语言功能的基础。有关MO语言文件的完整信息列表,请访问以下资源:

➤WordPress Codex 页面 — http://codex.wordpress.org/
访问后选择你用的语言
➤WordPress 语言文件资源 — http://svn.automattic.com/wordpress‐i18n/

使用WP_DEBUG选项可以更容易地调试WordPress中的错误。启用WP_DEBUG将在屏幕上显示WordPress错误,而不是在白屏上隐藏这些错误。要启用WP_ DEBUG,只需将选项值设置为true

define( 'WP_DEBUG', true );

WordPress的新安装将在wp‐config.php中定义这个选项为false。如果未定义此选项,则默认为false,不显示错误消息。当你完成调试时,请记住禁用或删除此选项,因为错误消息可能帮助黑客在你的网站中找到漏洞。

我们建议你在WordPress中开发时始终保持WP _ DEBUG开启,以解决可能显示的任何警告或错误。

wp‐config.php高级配置选项

你可以在wp‐config.php文件中设置其他高级选项。默认情况下,这些选项不在wp-config.php文件中,所以你需要手动将它们添加到文件中。要设置你的WordPress地址和博客地址,使用以下两个选项:

define( 'WP_SITEURL', 'http://example.com/wordpress' );
define( 'WP_HOME', 'http://example.com/wordpress' );

WP_SITEURL选项允许你临时更改WordPress站点的URL。这并不改变siteurl的数据库选项值,而是临时改变了值。如果该选项被删除,WordPress将恢复使用siteurl数据库设置。WP_HOME选项的工作方式完全相同,让你暂时改变WordPress的HOME值。两个值都应该包含完整的URL,包括http:/

如果你用一个临时的开发URL(如new.example.com)构建WordPress网站,这是一个很有用的技巧。你可以简单地删除这两个选项,WordPress将使用配置好URL来加载。

WordPress 3.7版本引入了WordPress的自动后台更新。默认情况下,只有小版本(例如,4.1, 4.2.x等等)会自动更新。目前有四种类型的自动后台更新:

  • 核心更新
  • 插件更新
  • 主题更新
  • 转换文件更新

要完全禁用所有自动更新,包括刚才列出的所有四种类型,你需要设置automatic_UPDATER_DISABLED常数为true,如下所示:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

或者,你可以为主要版本和开发目的启用自动更新。使用WP_ AUTO_UPDATE_CORE常量,你可以用以下三种方式之一来定义自动更新:

  • true -主版本(Major)、次版本(minor)和开发自动更新都是可行的。
  • false -主版本(Major)、次版本(minor)和开发自动更新都是禁用的。
  • 小的更新可行。主要和开发更新被禁用。

// Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );
// Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );
// Enables core updates for minor releases (default):
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

关于配置WordPress自动更新的更多信息,请访问http://codex.wordpress.org/Configuring_Automatic_Background_Updates。WordPress还提供了一个选项,允许你移动wp-content目录。两个必需的选项是:

define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] .'/blog/wp-content' );
define( 'WP_CONTENT_URL', 'http://example.com/blog/wp-content');

WP_CONTENT_DIR选项的值含义是wp‐content目录的完整本地路径。WP_CONTENT_URL是这个目录的完整URI。你可以这样设置插件目录的路径:

define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content/plugins' );
define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins');

WP_PLUGIN_DIR和WP_PLUGIN_URL是开发者用来确定插件文件夹所在位置的选项。如果开发者不使用这些常量,那么如果移动wp-content目录,他们的代码很有可能会崩溃。如果没有在开发环境中进行测试,永远不要移动生产服务器上的wp‐content目录。

define( 'UPLOADS', 'blog/wp-content/my-filez' );

上传目录必须存在于包含WordPress core文件的目录或目录中的子目录中,不能存在于WordPress文件夹结构之外。WordPress会为每一篇文章或页面保存修改。编辑的内容可以通过点击保存或发布按钮保存,也可以通过WordPress内置的自动保存功能保存。

想象一下,如果你创建的每个帖子都有10次修改。如果你有100篇文章,那么你的数据库中就会有1000条记录。这可能会迅速增加数据库的大小,甚至可能降低网站的速度,因为在较大的数据库中获取表记录需要更长的时间。幸运的是,WordPress有一个内建的后修正选项,叫做WP_post_revisions。您可以将此选项设置为false以完全禁用所有的文章修订,或者您可以指定为每个文章或页面保留的最大修订数。以下是这两种情况的例子:

define( 'WP_POST_REVISIONS', false );
define( 'WP_POST_REVISIONS', 5 );

你也可以通过设置AUTOSAVE_interval选项来配置自动保存时间间隔。WordPress在编辑文章时使用了AJAX来自动保存修改。缺省情况下,时间间隔为60秒。您可以在wp‐config.php中设置自动保存的秒间隔。使用此代码将自动节省时间设置为5分钟:

define( 'AUTOSAVE_INTERVAL', 300 );

SAVEQUERIES是一个很好的调试选项。激活此选项会将所有数据库查询保存到可以显示在页面上的全局数组中。这可以帮助调试查询问题,也可以查看在每个页面加载时WordPress正在执行什么。如果你正在处理一个主题或插件,并且似乎不能得到正确的文章集,这个调试选项将告诉你WordPress到底想从数据库中得到什么。通过将值设置为true来启用此选项

define( 'SAVEQUERIES', true );

要在主题中显示查询数组,请在要查看的主题模板文件中添加以下代码:

if ( current_user_can( 'manage_options' ) ) {
global $wpdb;
print_r( $wpdb->queries );
}

上面的代码只有在登录用户有能力管理选项时才显示保存的查询数组,本质上是锁定它,因此只有站点管理员才能看到输出。主题和模板文件将在第9章中讨论。也可以直接从的wp‐config.php文件中启用日志记录。要启用日志记录,首先需要创建一个php_error.log文件并上传到WordPress根目录。然后把在log_errors PHP选项中指向你的日志文件:

@ini_set( 'log_errors','On' );
@ini_set( 'display_errors','Off' );
@ini_set( 'error_log','/public_html/wordpress/php_error.log' );

所有错误现在都将被记录到这个文件中。这个文件还将记录由于启用前面讨论的WP_DEBUG选项而产生的任何错误。在前面的示例中,display_errors被设置为Off,这对于实际站点来说非常合适,因为我们不希望显示错误消息。如果正在调试并希望实时查看错误,只需将该选项设置为On。要记住error_log的值是相对于web服务器的文档根目录,而不是WordPress根目录。

你也可以通过WP_MEMORY_LIMIT选项来设置允许WordPress使用的内存限制。如果你的网站达到WordPress运行的内存限制,你会看到错误“允许的内存大小xxxxx字节耗尽。”增加内存限制可以解决这个问题。内存限制的设置单位为兆字节:

define( 'WP_MEMORY_LIMIT', '64M' );

只有你的托管公司允许时,才可以设置此选项。一些托管公司不允许动态更改内存限制,并且将此值设置得很低。这个问题通常出现在成本较低的主机托管公司,这些公司通过将更多的web服务器实例打包到单个物理主机上来维持其价格,从而造成内存占用的竞争。所以这只会增加WordPress的内存,而不会增加服务器上运行的其他应用程序的内存。要提高所有网站的内存限制,要设置php_value_memory_limit变量,这个变量在php.ini文件。当导入大量内容时,比如数月或多年的博客文章,我们可能会达到这个内存限制。

WordPress的一个重要的特性是内置本地化器。WordPress默认显示为英文,但可以轻松设置显示任何已翻译的语言。设置WPLANG选项触发WordPress加载指定的语言文件

define ( 'WPLANG', 'en-GB' );

前面显示的选项值包括ISO‐639语言代码,然后是ISO‐3166国家代码。所以en-GB就是English-GreatBritain。此设置将引用您的.mo和. profile进行语言翻译。您还可以定义LANGDIR选项。这个选项定义了存放language .mo文件的目录。默认情况下,WordPress会以wp‐content/languages路径格式查看.mo文件。如果你想移动这个文件夹,只需参考这样设置LANGDIR选项:

define( 'LANGDIR', '/wp-content/bury/my/languages' );

WordPress现在会在新位置查找你的.mo文件。CUSTOM_USER_TABLE和CUSTOM_USER_ META _TABLE也是非常强大的选项。如果你想让两个或更多单独的WordPress安装使用同一个用户帐户,它们很有用。记得在安装WordPress之前设置这个。

define( 'CUSTOM_USER_TABLE', 'joined_users' );
define( 'CUSTOM_USER_META_TABLE', 'joined_usermeta' );

通过设置这两个选项,您可以定义默认的WordPress用户和usermeta数据库表的名称。这样做意味着两个网站共享用户信息,包括用户名、密码、作者简介等等。这是一个很好的方法来建立一个新的WordPress安装,但不丢失与当前用户帐户同步。

如果你想让你的用户在每个安装的WordPress上有不同的角色,但仍然共享用户帐户,不要设置CUSTOM_user_META_TABLE选项。存储在用户表中的所有内容将保持不变,但其他内容将是特定于博客的(即,用户级别,名和姓,等等)。你可以设置多个cookie选项,如cookie_ DOMAIN, COOKIEPATH,和SITECOOKIEPATH .这些选项通常用于WordPress多站点安装,利用子域名的网站。这允许你设置主域名,以便可以在所有cookie上创建和验证cookie网络中的子域名。

define( 'COOKIE_DOMAIN', '.domain.com' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );

通常不需要使用或更改这个选项,但如果遇到cookie问题,这是首先要检查的地方。由于包含了插件和主题的自动安装功能,以及自动更新过程,你可以在wp‐config.php文件中直接设置FTP设置。只有当你的主机未配置为支持自动安装时,才需要这样做。这很容易检查,因为每次试图安装插件或主题时,都会被要求提供FTP信息。要在WordPress中保存你的FTP信息,请在wp-config.php文件中添加以下选项:

define( 'FTP_USER', 'username' );
define( 'FTP_PASS', 'password' );
define( 'FTP_HOST', 'ftp.example.com:21' );

只需输入FTP用户名、密码和主机端口,就万事俱备了!使用自动安装程序时,WordPress将不再询问你的FTP信息。您可以为各种配置设置额外的FTP/SSH选项:

// sets the filesystem method: "direct", "ssh", "ftpext", or "ftpsockets"
define( 'FS_METHOD', 'ftpext' );
// absolute path to root installation directory
define( 'FTP_BASE', '/public_html/wordpress/' );
// absolute path to wp-content directory
define( 'FTP_CONTENT_DIR', '/public_html/wordpress/wp-content/' );
// absolute path to wp-plugins directory
define( 'FTP_PLUGIN_DIR ', '/ public_html /wordpress/wp-content/plugins/' );
// absolute path to your SSH public key
define( 'FTP_PUBKEY', '/home/username/.ssh/id_rsa.pub' );
// absolute path to your SSH private key
define( 'FTP_PRIVKEY', '/home/username/.ssh/id_rsa' );
// secure FTP SSL-connection if supported by the hosting company
define( 'FTP_SSL', false );

你也可以在WordPress中使用FS_CHMOD_FILE和FS_CHMOD_ DIR选项覆盖默认文件权限:

define( 'FS_CHMOD_FILE', 0644 );
define( 'FS_CHMOD_DIR', 0755 );

单个数字值表示web服务器上文件和文件夹的用户、组和全局权限。要了解更多关于WordPress和文件权限的信息,请访问http://codex.wordpress.org/Changing_File_Permissions。这些设置可以帮助某些主机公司对所有用户文件使用限制性的权限。这将覆盖服务器设置,并允许WordPress更新和自动安装工作。

一些缓存插件需要WP_CACHE选项才能工作。此选项将包含在wp‐content/advanced‐cache.php中。要启用此选项,请使用以下代码:

define( 'WP_CACHE', true );

WordPress有很多常量选项可以设置。有一个PHP函数可以查看当前安装时设置的所有常量:

print_r( @get_defined_constants() );

一个高级选项是在登录WordPress网站时强制使用SSL。这需要用户登录通过HTTPS访问链接和加密所有数据传输到和从您的网站。要在登录时激活SSL,添加FORCE_SSL_ login选项,如下所示:

define( 'FORCE_SSL_LOGIN', true );

您还可以强制所有管理页面使用SSL。这是通过FORCE_ SSL_ ADMIN选项激活的,如下所示:


define( 'FORCE_SSL_ADMIN', true );

这将强制所有管理仪表板页面(/wp‐admin)使用SSL加密。记住激活此设置会降低的管理页面加载时间,但所有从WordPress传递和从WordPress传递的数据都将使用SSL加密。还请记住,你的网站必须配置使用SSL。快速测试的方法是使用https访问你的站点,如https://example.com 如果加载了页面,则在服务器上设置SSL

在WordPress的管理端强制使用SSL是一个很好的安全增强。所有进出WordPress的数据都将被加密,防止有人窃取你的WordPress登录凭证。

从2.9版开始,WordPress就有了一个垃圾桶。此垃圾桶包含已删除的任何帖子、页面、附件和评论。这允许你恢复任何你可能在WordPress中意外删除的内容。默认情况下,垃圾箱每30天清空一次。清空回收站将永久删除回收站中的任何项目。你可以设置EMPTY_TRASH_DAYS选项来修改这个时间间隔:

define( 'EMPTY_TRASH_DAYS', 7 );

垃圾将会每7天自动清空一次。您还可以通过将选项值设置为0来完全禁用垃圾。垃圾链接现在将被永久删除链接取代。记住,当你永久删除时WordPress不会要求你确认。还有一个选项可以禁用WordPress cron。Cron用于在WordPress中执行定时任务。一些常见的计划任务包括发布一个计划的帖子,检查WordPress的新版本,主题和插件。要禁用WordPress cron,那在wp-config.php文件中添加此选项:

define( 'DISABLE_WP_CRON', true );

你也可以在wp-config.php文件中定义WordPress多站点选项。启用多站点WordPress的特性,只需添加WP_ALLOW_MULTISITE常量:define('WP_ALLOW_MULTISITE',true);将该选项设置为true,将在“工具”下显示新的“网络设置”子菜单。网络仪表板的设置部分允许你启用和配置WordPress多站点。更多关于WordPress多站点特性的内容见第10章。本节涵盖了wp‐config.php的许多常见选项。还有有更多其他wp‐config.php可在WordPress中使用。还有一个很好的学习资源wp‐config.php选择是Codex: http://codex.wordpress.org/Editing_wp‐config.php

.htaccess

.htaccess文件主要用于为你的网站创建漂亮的永久(固定)链接和关键字注入url。WordPress默认创建丑陋的查询字符串形式的url,通常有一个ID,如http://example.com/?p=45。这些url功能齐全,但对搜索引擎和网站访问者不太友好。通过启用漂亮的永久链接,WordPress根据网站内容创建url,比如帖子和页面标题、类别和标签名称,以及存档日期。

使能永久(固定)连接Permalinks

开启永久链接,要进入WordPress Dashboard的“设置”页面,如图2-3所示。选择除“默认”之外的任何永久链接结构,并单击“保存更改”链接。保存更改后,WordPress会尝试创建默认的.htaccess文件。如果你的WordPress根目录是服务器可写的,文件会自动创建。如果WordPress无法创建.htaccess文件,你会看到如何手动创建文件的说明,如图2-4所示。

使用月和年日期可以创建永久链接如下:

/%year%/%monthnum%/%postname%/
像这样创建一个永久链接:
http://example.com/2015/10/happy-halloween/

  • 搜索引擎优化(SEO) -关键字在你的URL可以给你的网站一个很大的SEO提升。搜索引擎将在其算法中使用这些关键字来在搜索结果中进行定位。
  • 向前兼容性-无论你的网站使用什么平台(WordPress, Drupal, Joomla!),一个稳定的永久链接结构可以很容易地复制,如果你曾经迁移过。
  • 可用性——访问者不友好的ID url使与朋友分享链接同样不愉快。很难区分你的ID驱动url之间的内容。
  • 分享——在这个社交网络的互联网时代,分享是你在线存在的自然延伸。在URL中的关键字将使找到你的链接非常容易,并传达内容的直接上下文。

默认情况下,永久链接是由mod_rewrite Apache模块控制的。如果你的web服务器不支持mod_rewrite或永久链接,WordPress将使用标准的基于查询字符串的url,如http://example.com/?p=3416

.htaccess重写规则

通常,web服务器获取一个URL,该URL引用服务器文档文件系统中的一个文件,加载该文件,并处理其中的内容,以生成返回给用户浏览器的HTML。
对于wp‐login.php这样的WordPress文件,登录屏幕就是这样生成的。当面对一个漂亮的永久链接如example.com/2015/travel/haddonfield/、web服务器只需要加载主循环的WordPress,核心代码可以解析URL并将其转化为数据库查询,发现一篇文章的标题Haddonfield旅游的范畴。与静态网站不同的是,WordPress将内容存储在数据库中,只有少数文件会被直接加载。

WordPress永久链接机制背后的“秘密武器”总结在三个重写规则中,添加到.htaccess文件,当你启用永久链接:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [ L]

很简单,这些规则检查用于访问站点的URL,以查看它是否引用了文件系统层次结构中的现有文件或目录。! f和! d符号是否定的;.htaccess确保URL不引用任何有效的文件或目录路径名。如果URL确实匹配了一个有效的文件,例如WordPress管理功能如wp‐login.php,那么就不会重写,web服务器会尝试加载该文件(执行其中包含的PHP代码)。如果在提供的URL指定的路径上没有文件或目录,那么传入的URL将重写为index.php,调用WordPress系统的核心。作为第5章内容显示循环讨论的序言,将更详细地研究将URL字符串转换为MySQL查询的步骤。

如果你把非WordPress web服务器的内容放在与WordPress代码相同的目录结构中,那么简单的检查文件或目录是否存在可能会产生意想不到的副作用。例如,考虑将图像目录看作wp‐content的对等目录:example.com/wp‐content和example.com/images。你可能会选择绕过WordPress媒体库,因为这些图像是由它们自己的一组管理进程管理的。当用户用输入错误的图像名称创建一个URL,指向一个不存在的文件时,会发生什么?.htaccess重写规则将被触发,因为没有以该名称命名的文件,并且WordPress核心将被启动。当用户收到一个不存在的URL目标的404错误时,他们希望看到的是一个默认的WordPress网站内容。如果你打算在你的WordPress周围安装添加目录,要么把WordPress放到它自己的子目录example.com/wordpress(()中,要么在.htaccess中添加一个重写规则来识别你添加的同级目录,并立即将这些url发送给web服务器:

RewriteRule ^images/(.*) images/$1 [L]

该规则实际上是说:“获取任何以images开头的URL,并将其传递给web服务器。”[L]指令意味着“匹配此规则后停止处理”,而重写本身只是回显它传递的内容。如果在安装WordPress的同时有几个目录,那么每个目录都需要一条重写规则。

.htaccess文件也可以管理URL重定向。如果你将你的About页面从http://example.com/about更改为http://example.com/about‐me,任何访问您原始URL的人都会点击404页面。一个URL重定向将重定向从旧的URL到新的URL,这样你的访问者不会迷路。这也提醒搜索引擎关于新的URL,以便他们可以更新他们的索引。下面是一个301永久重定向到静态页面的例子:

redirect 301 /about http://example.com/about-me
WordPress对url做了一些额外的重写和清理,以改善搜索引擎的结果,你将在第5章看到。

通过.htaccess配置控制

.htaccess文件非常强大,可以控制的不仅仅是URL结构。例如,可以使用.htaccess文件控制PHP配置选项。要增加分配给PHP的内存,使用这个命令:

php_value memory_limit 64M

这将PHP中的内存限制提高到64MB。你也可以增加文件的最大大小上传和张贴大小:

php_value upload_max_filesize 20M
php_value post_max_size 20M

现在你可以上传和发布的最大文件大小被设置为20MB。大多数托管公司默认将这些值设置为大约2MB,所以这些设置通常用于更大的文件上传。并不是所有的托管公司都允许在你的.htaccess文件中设置这些值,如果是这样的话,他们可能会在你的网站上触发一个错误。

htaccess文件也可以用于安全目的。使用.htaccess允许你通过IP地址限制对你的网站的访问,本质上是锁定了匿名访问者。要通过IP地址锁定您的网站,请在.htaccess文件中添加以下代码:

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
#IP address to whitelist
allow from xxx.xxx.xxx.xxx

将xxx.xxx.xxx.xxx替换为你希望授予访问你网站权限的任何IP地址。当你需要添加多个IP地址是可以允许有多个从行。这允许访问您的网站,只有当你使用这里定义的IP地址。一个更广泛使用的选项是锁定你的wp管理目录。这意味着您指定的IP地址可以访问您的管理仪表板url。这使得任何人试图黑进你的WordPress后端变得更加困难。为了实现这一点,在你的wp‐admin目录中使用前面的代码创建一个单独的.htaccess文件。

记住,大多数isp动态分配客户端地址,因此正在使用的计算机的IP地址偶尔会改变。如果你被锁定了,只需用你的新IP地址更新你的.htaccess文件或删除该文件。如果你允许在你的网站上开放注册,你需要允许你的用户访问wp管理目录,这不是一个好方法。

还可以允许通配符IP地址。例如,123.123.123。*将允许匹配前三个IP地址字节的任何人访问,最后的数字是通配符。还可以允许IP地址的范围。例如,123.123.123.110‐230将允许IP地址在123.123.123.110和123.123.123.230之间的任何人

您还可以从.htaccess文件启用错误日志记录。第一步是在你的WordPress根目录下创建一个php‐errors.log文件。然后在.htaccess文件中添加以下代码,以启用错误日志记录:

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_flag log_errors on
php_value error_log /public_html/php-errors.log

这允许错误日志记录,但禁止显示任何错误消息。同样,这是真是环境的完美设置,因为我们不希望错误公开显示。

.maintenance文件

WordPress有一个内置的维护模式,可以通过.maintenance文件启用。.maintenance文件会被WordPress在自动更新过程中使用。这可以防止访问者在更新WordPress核心文件时看到任何错误消息。要测试这个特性,只需创建一个新的.maintenance文件,并添加以下代码行:

将该文件添加到你的WordPress根目录,你的网站将立即进入维护模式。这将锁定所有访问者的网站,并显示一个通用的维护信息“概要无法进行定期维护。”
过一会儿再来看。”time()函数可以用任何UNIX格式的时间戳替换。

你可以通过创建一个maintenance.php文件并将其放在wp‐content目录中来设置一个自定义维护页面。WordPress使用这个文件在你设置的任何强制维护期间显示。这允许您创建一个自定义维护通知您的网站访客。这个文件也被WordPress自动更新过程使用。在更新过程中,在WordPress安装新的核心文件之前会创建一个.maintenance文件。这确保在此过程中不会有任何错误消息给访问者。

WP-CONTENT 用户PLAYGROUND
wp‐content目录存储了定制WordPress所需的所有文件。这个目录存储你的插件,主题,上传的媒体和其他文件,以任何方式扩展WordPress。wp‐content目录有一个PHP文件index.php。这个文件的内容如下:

<?php
// Silence is golden.

那么这个文件的意义是什么呢?实际上这是一个非常重要的文件。index.php文件阻止任何人查看wp-content文件夹的目录列表。如果index.php文件不存在,而你的web服务器允许目录列表,访问http://example.com/wp‐content/将显示该目录下的所有文件和文件夹。这可以帮助黑客获得访问关键文件,可能有助于黑客利用你的网站;

如果你正在手动更新WordPress,请确保避免覆盖你的wp-content目录。

插件

插件存储在wp-content/ Plugins目录下。一个插件可以是一个文件夹中的单个文件,也可以是多个文件。WordPress会扫描/plugins目录下的任何文件,以确定该文件是否是一个正确格式化的WordPress插件。如果文件被确定为一个插件,它就会出现在你的管理仪表板上的“插件”页面下准备激活。

要自动禁用插件,可以从/plugins文件夹中删除它。如果一个活动插件的文件丢失了,WordPress会在尝试加载丢失的插件代码之前停用插件。

你的wp-content目录也可以包含一个/mu‐plugins目录。Must-use(mu)代表必须使用的插件,是指在WordPress中自动启用的插件。在这个文件夹中存在的任何插件将被执行,就像一个标准激活插件一样。主要的区别是mu-plugins
不能在子目录中存在,否则将被忽略。要了解更多关于mu-plugins的信息,请访问pttp://codex.wordpress.org/Must_Use_Plugins。我们将在第8章重新讨论插件。

小节:主题

主题存储在wp‐content/ Themes目录中。每个主题必须独立存在,必须包含适当的模板文件,WordPress才能把它识别为一个可用的主题。主题目录中至少要有一个index.php和style.css文件,并加上适当的标签,才能显示在管理仪表板的外观(外观)主题屏幕下。WordPress可以在你的服务器允许的目录中存储尽可能多的主题。在“外观主题”界面下,可以轻松预览任何主题,也可以激活新主题。第9章会更详细地介绍主题。

上传和媒体目录

WordPress将上传的媒体存储在wp-content/uploads文件夹中。这个目录在WordPress的默认安装中不存在。/uploads目录是你第一次成功上传文件到WordPress时创建的。

默认情况下,WordPress会以每月和每年为基础的文件夹存储上传内容。所以你上传的图像会像这样存储:
/wp-content/uploads/2015/06/image.png

在可以在WordPress中上传任何图片或文件之前,需要设置/wp‐content目录为可写的。当你上传第一张图片时,WordPress会自动创建/uploads目录以及任何需要的子目录。成功上传第一张图片后,将/wp‐content权限设置为不可写,一般为755。目前,还没有办法将通过FTP上传的图片导入WordPress媒体库。如果使上载目录可写不是一个选项,有插件可以实现该功能(如NextGen Gallery,在自定义目录部分中详细描述)包括这个功能。

WordPress 多网站模式(Multisite)以不同的方式存储上传的媒体。Multisite模式在标准上传目录中创建了一个站点目录,而不是一个上传目录。在这个文件夹中有多个以数字ID命名的子目录。此ID是文件夹附加到的博客ID。多站点网络中的每个站点都有一个唯一的博客ID。第10章会更详细地介绍这一点。例如,你的第二个WordPress Multisite站点上传目录是这样的:
/uploads/sites/2/files/

这有助于保持单独的网站上传分开,更容易维护。

更新目录

wp‐content/upgrade目录是在使用自动更新过程时由WordPress自动创建的。这个文件夹是WordPress用来存储从WordPress.org下载的新版本的WordPress的。在更新之前,下载的WordPress压缩包解压提取到这个文件夹中。此文件夹要保持不变,以便能正常进行自动更新。如果这个目录被删除,WordPress会在你下次运行自动更新器时重新创建它。

定制目录

一些需要大量自定义文件的插件会将这些文件存储在wp-content文件夹的一个目录中。

W3 Total Cache插件(https://wordpress.org/plugins/w3‐Total‐Cache he 创建一个/wp‐content/ Cache目录来存储为你的网站创建的所有缓存页面。缓存页面就是在你的网站上以静态HTML文件的形式保存的一个完全的页面。缓存插件为访问者提供静态HTML文件,而不是每次用户单击其中一个链接时生成页面。这大大减少了WordPress加载时间并提高了性能,因为页面不是在每个视图上生成的,而是在缓存根据你的设置重新生成时才生成的。

W3 Total Cache插件还添加了一个文件到wp‐content目录:advanced‐Cache.php。W3 Total Cache要正常工作,需要这个文件。当W3 Total Cache被激活时,它会尝试创建这个文件。如果失败,就会出现一个通知来提醒您。该文件存在于W3 Total Cache插件目录中,可以手动移动到wp‐content目录中。

WP‐DB Backup插件(http://wordpress.org/extend/plugins/wp‐DB‐Backup创建一个/ WP‐content/Backup‐b158b文件夹(其中b158b是一个随机字符串)来存储数据库的本地备份。当你选择Save to Server选项时,所有数据库备份文件将存储在这个目录中。重要的是不要删除备份,除非你确定不再需要。

本章小结:


本章介绍了如何下载WordPress。它还包括配置关键的WordPress core文件,wp‐config.php和.htaccess,以及更高级的配置。还回顾了wp-content目录以及WordPress如何与自定义目录交互。

有了WordPress的结构和配置视图,那要学习如何创建一个本地开发环境,这样我们就可以开始自定义和开发,而不影响已发布的网站。

posted @ 2021-07-17 16:47  陈小房  阅读(234)  评论(0编辑  收藏  举报