各位观众老爷,晚上好!我是今晚的讲师,今天咱就来扒一扒WordPress的“骨架”——wp-includes/default_constants.php
。
这个文件啊,就像一个房子的地基,里面定义了一堆核心常量,这些常量决定了WordPress的基本运行环境和行为。搞清楚它们,你才能真正理解WordPress的运作方式,也才能更好地进行定制和优化。
咱们开始吧!
一、 常量是什么?为什么要定义常量?
首先,得弄明白啥是常量。简单来说,常量就是一个名字,指向一个固定的值。这个值在程序运行过程中,不能被修改。
那为啥要用常量呢?
- 提高代码可读性: 比如,用
WP_DEBUG
代替true
或false
,一看就知道是调试模式。 - 避免硬编码: 把一些配置信息放在常量里,方便统一修改,不用满地找数字改。
- 防止意外修改: 常量的值不能被修改,保证了程序的稳定性。
- 条件判断: 很多插件和主题会根据某些常量的值来决定是否执行某些代码。
二、 default-constants.php
的位置和作用
default-constants.php
文件位于WordPress安装目录下的 wp-includes
文件夹里。它的主要作用是:
- 定义WordPress运行所需的各种核心常量。
- 设置一些默认值,比如网站的字符编码、调试模式等。
- 为插件和主题提供一些预定义的常量,方便它们进行开发。
这个文件在WordPress启动时会被加载,所以里面定义的常量在整个程序的生命周期内都有效。
三、 常量分类与详解(附带代码示例)
咱们把 default-constants.php
里的常量分成几类,逐个讲解。
1. 路径和URL相关常量:
这类常量定义了WordPress的各种路径和URL,方便程序访问文件和资源。
常量名 | 作用 | 示例 |
---|---|---|
ABSPATH |
WordPress根目录的绝对路径。 | php if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } |
WPINC |
wp-includes 目录相对于 ABSPATH 的路径。 |
php if ( ! defined( 'WPINC' ) ) { define( 'WPINC', 'wp-includes' ); } |
WP_CONTENT_DIR |
wp-content 目录的绝对路径。 |
php if ( ! defined( 'WP_CONTENT_DIR' ) ) { define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); } |
WP_CONTENT_URL |
wp-content 目录的URL。 |
php if ( ! defined( 'WP_CONTENT_URL' ) ) { define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' ); } |
WP_PLUGIN_DIR |
wp-content/plugins 目录的绝对路径。 |
php if ( ! defined( 'WP_PLUGIN_DIR' ) ) { define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' ); } |
WP_PLUGIN_URL |
wp-content/plugins 目录的URL。 |
php if ( ! defined( 'WP_PLUGIN_URL' ) ) { define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' ); } |
WPMU_PLUGIN_DIR |
wp-content/mu-plugins 目录的绝对路径。(Must-Use插件目录) |
php if ( ! defined( 'WPMU_PLUGIN_DIR' ) ) { define( 'WPMU_PLUGIN_DIR', WP_CONTENT_DIR . '/mu-plugins' ); } |
WPMU_PLUGIN_URL |
wp-content/mu-plugins 目录的URL。(Must-Use插件目录) |
php if ( ! defined( 'WPMU_PLUGIN_URL' ) ) { define( 'WPMU_PLUGIN_URL', WP_CONTENT_URL . '/mu-plugins' ); } |
WP_THEME_DIR |
wp-content/themes 目录的绝对路径。 |
php if ( ! defined( 'WP_THEME_DIR' ) ) { define( 'WP_THEME_DIR', WP_CONTENT_DIR . '/themes' ); } |
WP_THEME_URL |
wp-content/themes 目录的URL。 |
php if ( ! defined( 'WP_THEME_URL' ) ) { define( 'WP_THEME_URL', WP_CONTENT_URL . '/themes' ); } |
UPLOADS |
用户上传文件的目录相对于 WP_CONTENT_DIR 的路径。(默认是 uploads ) |
php if ( ! defined( 'UPLOADS' ) ) { define( 'UPLOADS', 'uploads' ); } |
WP_LANG_DIR |
WordPress语言文件的目录。(默认是 wp-content/languages ) |
php if ( ! defined( 'WP_LANG_DIR' ) ) { define( 'WP_LANG_DIR', WP_CONTENT_DIR . '/languages' ); } |
代码示例:
假设你的WordPress安装在 /var/www/html/wordpress
目录下,网站URL是 https://example.com
,那么:
ABSPATH
的值就是/var/www/html/wordpress/
WP_CONTENT_DIR
的值就是/var/www/html/wordpress/wp-content
WP_CONTENT_URL
的值就是https://example.com/wp-content
注意: 这些常量的值可以通过在 wp-config.php
文件中重新定义来覆盖默认值。 比如,你想把 wp-content
目录放在 WordPress 根目录之外,就可以在 wp-config.php
中定义 WP_CONTENT_DIR
和 WP_CONTENT_URL
。
2. 功能开关类常量:
这类常量用于开启或关闭WordPress的某些功能。
常量名 | 作用 | 示例 |
---|---|---|
WP_DEBUG |
开启/关闭调试模式。 开启后,WordPress会显示更详细的错误信息,方便调试。 强烈建议在生产环境中关闭此选项。 | php if ( ! defined( 'WP_DEBUG' ) ) { define( 'WP_DEBUG', false ); } |
WP_DEBUG_LOG |
是否将调试信息写入日志文件。 如果设置为 true ,WordPress会将错误信息写入 wp-content/debug.log 文件。 |
php if ( ! defined( 'WP_DEBUG_LOG' ) ) { define( 'WP_DEBUG_LOG', false ); } |
WP_DEBUG_DISPLAY |
是否在页面上显示调试信息。 如果设置为 true ,WordPress会将错误信息直接显示在页面上。 同样,强烈建议在生产环境中关闭此选项。 |
php if ( ! defined( 'WP_DEBUG_DISPLAY' ) ) { define( 'WP_DEBUG_DISPLAY', true ); } |
SCRIPT_DEBUG |
开启/关闭脚本调试模式。 开启后,WordPress会加载未压缩的JS和CSS文件,方便调试。 | php if ( ! defined( 'SCRIPT_DEBUG' ) ) { define( 'SCRIPT_DEBUG', false ); } |
SAVEQUERIES |
是否记录数据库查询信息。 开启后,WordPress会将所有数据库查询信息保存在 $wpdb->queries 数组中,方便性能分析。 开启此选项会显著降低性能,请谨慎使用。 |
php if ( ! defined( 'SAVEQUERIES' ) ) { define( 'SAVEQUERIES', false ); } |
WP_CACHE |
开启/关闭WordPress缓存。 注意:这个常量只是一个简单的开关,真正启用缓存需要安装并配置缓存插件。 | php if ( ! defined( 'WP_CACHE' ) ) { define( 'WP_CACHE', false ); } |
CONCATENATE_SCRIPTS |
是否合并JS和CSS文件。 开启后,WordPress会将多个JS和CSS文件合并成一个文件,减少HTTP请求。 在某些情况下,可能会导致兼容性问题,需要关闭此选项。 | php if ( ! defined( 'CONCATENATE_SCRIPTS' ) ) { define( 'CONCATENATE_SCRIPTS', true ); } |
WP_ALLOW_REPAIR |
是否允许自动修复数据库。 如果设置为 true ,可以在浏览器中访问 wp-admin/maint/repair.php 页面来自动修复数据库。 强烈建议在修复完成后立即设置为 false ,以防止恶意访问。 |
php if ( ! defined( 'WP_ALLOW_REPAIR' ) ) { define( 'WP_ALLOW_REPAIR', false ); } |
DISALLOW_FILE_MODS |
是否禁止在后台修改文件。 如果设置为 true ,将禁止在后台编辑主题、插件等文件。 可以提高安全性。 |
php if ( ! defined( 'DISALLOW_FILE_MODS' ) ) { define( 'DISALLOW_FILE_MODS', false ); } |
DISALLOW_FILE_EDIT |
是否禁止在后台编辑主题和插件。 如果设置为 true ,后台将无法编辑主题和插件文件。比 DISALLOW_FILE_MODS 更严格,只针对主题和插件。 |
php if ( ! defined( 'DISALLOW_FILE_EDIT' ) ) { define( 'DISALLOW_FILE_EDIT', false ); } |
代码示例:
// 开启调试模式,并记录日志
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false ); // 不在页面上显示错误信息
// 禁止在后台修改文件
define( 'DISALLOW_FILE_MODS', true );
3. 多站点相关常量:
这类常量用于配置WordPress多站点网络。
常量名 | 作用 | 示例 |
---|---|---|
WP_ALLOW_MULTISITE |
是否允许启用多站点功能。 如果设置为 true ,可以在WordPress后台启用多站点网络。 |
php if ( ! defined( 'WP_ALLOW_MULTISITE' ) ) { define( 'WP_ALLOW_MULTISITE', false ); } |
MULTISITE |
是否启用多站点网络。 注意:这个常量是在 wp-config.php 中由 WordPress 自动设置的,不要手动修改。 |
php // 示例: 不要手动设置 // define( 'MULTISITE', true ); |
SUBDOMAIN_INSTALL |
是否使用子域名模式。 如果设置为 true ,新的站点将使用子域名,否则使用子目录。 |
php // 示例: // define( 'SUBDOMAIN_INSTALL', true ); |
DOMAIN_CURRENT_SITE |
当前站点的域名。 | php // 示例: // define( 'DOMAIN_CURRENT_SITE', 'example.com' ); |
PATH_CURRENT_SITE |
当前站点的路径。 | php // 示例: // define( 'PATH_CURRENT_SITE', '/' ); |
SITE_ID_CURRENT_SITE |
当前站点的ID。 | php // 示例: // define( 'SITE_ID_CURRENT_SITE', 1 ); |
BLOG_ID_CURRENT_SITE |
当前博客的ID。 | php // 示例: // define( 'BLOG_ID_CURRENT_SITE', 1 ); |
代码示例:
// 允许启用多站点功能
define( 'WP_ALLOW_MULTISITE', true );
// 多站点相关的其他常量通常由WordPress自动设置,不需要手动修改。
4. 数据库相关常量:
这类常量定义了数据库连接信息。 注意:这些常量必须在 wp-config.php
中设置。
常量名 | 作用 | 示例 |
---|---|---|
DB_NAME |
数据库名。 | php // 示例: define( 'DB_NAME', 'wordpressdb' ); |
DB_USER |
数据库用户名。 | php // 示例: define( 'DB_USER', 'wordpressuser' ); |
DB_PASSWORD |
数据库密码。 | php // 示例: define( 'DB_PASSWORD', 'your_password' ); |
DB_HOST |
数据库主机名。 | php // 示例: define( 'DB_HOST', 'localhost' ); |
DB_CHARSET |
数据库字符集。 建议使用 utf8mb4 ,支持存储Emoji表情。 |
php // 示例: define( 'DB_CHARSET', 'utf8mb4' ); |
DB_COLLATE |
数据库排序规则。 通常情况下,不需要修改此选项。 | php // 示例: define( 'DB_COLLATE', '' ); |
AUTH_KEY , SECURE_AUTH_KEY , LOGGED_IN_KEY , NONCE_KEY , AUTH_SALT , SECURE_AUTH_SALT , LOGGED_IN_SALT , NONCE_SALT |
安全密钥。 用于加密Cookie,提高安全性。 必须设置为随机字符串。 可以使用 WordPress 官方提供的 密钥生成器 生成。 | php // 示例: define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); |
代码示例:
// ** MySQL 设置 - 具体数值来自您的主机提供商 ** //
/** WordPress 数据库的名称 */
define( 'DB_NAME', 'your_database_name' );
/** MySQL 数据库用户名 */
define( 'DB_USER', 'your_database_user' );
/** MySQL 数据库密码 */
define( 'DB_PASSWORD', 'your_database_password' );
/** MySQL 主机 */
define( 'DB_HOST', 'localhost' );
/** 创建数据表时使用的数据库字符集 */
define( 'DB_CHARSET', 'utf8mb4' );
/** 数据库整理类型。如不确定请勿更改 */
define( 'DB_COLLATE', '' );
/**#@+
* 身份验证密钥与盐。
*
* 修改这些为您自己的密语!
* 您可以生成一些随机的字符串,
* 使用{@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org密钥生成服务}
* 您可以在任何时候修改这些密钥,使所有已有的cookie失效。这会强制所有用户重新登录。
*
* @since 2.6.0
*/
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
5. 其他常量:
还有一些其他的常量,用于定义WordPress的一些其他行为。
常量名 | 作用 | 示例 |
---|---|---|
WP_MEMORY_LIMIT |
WordPress使用的最大内存限制。 如果你的网站需要处理大量的图片或插件,可以适当增加此值。 | php if ( ! defined( 'WP_MEMORY_LIMIT' ) ) { define( 'WP_MEMORY_LIMIT', '40M' ); } |
WP_MAX_MEMORY_LIMIT |
WordPress后台使用的最大内存限制。 通常比 WP_MEMORY_LIMIT 更大。 |
php if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) { define( 'WP_MAX_MEMORY_LIMIT', '256M' ); } |
WPLANG |
WordPress使用的语言。 如果你的网站需要使用中文,可以设置为 zh_CN 。 |
php if ( ! defined( 'WPLANG' ) ) { define( 'WPLANG', '' ); } |
WP_POST_REVISIONS |
保存的文章修订版本数量。 可以设置为 false 来禁用文章修订功能,或者设置为一个数字来限制保存的版本数量。 |
php if ( ! defined( 'WP_POST_REVISIONS' ) ) { define( 'WP_POST_REVISIONS', true ); } |
EMPTY_TRASH_DAYS |
自动清空回收站的天数。 设置为 0 可以禁用自动清空回收站功能。 |
php if ( ! defined( 'EMPTY_TRASH_DAYS' ) ) { define( 'EMPTY_TRASH_DAYS', '30' ); } |
WP_CRON_LOCK_TIMEOUT |
WordPress计划任务锁超时时间(秒)。 如果计划任务执行时间超过此值,WordPress会认为任务失败,并尝试重新执行。 | php if ( ! defined( 'WP_CRON_LOCK_TIMEOUT' ) ) { define( 'WP_CRON_LOCK_TIMEOUT', 60 ); } |
DISABLE_WP_CRON |
禁用 WordPress 计划任务。 设置为 true 将禁用 WordPress 自动执行的计划任务,需要手动运行 wp-cron.php 。 |
php if ( ! defined( 'DISABLE_WP_CRON' ) ) { define( 'DISABLE_WP_CRON', false ); } |
代码示例:
// 增加内存限制
define( 'WP_MEMORY_LIMIT', '128M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
// 使用中文
define( 'WPLANG', 'zh_CN' );
// 禁用文章修订版本
define( 'WP_POST_REVISIONS', false );
四、 wp-config.php
中的常量覆盖
重点来了! default-constants.php
中定义的常量只是默认值。 你可以在 wp-config.php
文件中重新定义这些常量,来覆盖默认值。 wp-config.php
文件会在 WordPress 启动时被加载,并且会在 default-constants.php
之后加载,所以 wp-config.php
中定义的常量会覆盖 default-constants.php
中的定义。
示例:
假设 default-constants.php
中定义了:
if ( ! defined( 'WP_DEBUG' ) ) {
define( 'WP_DEBUG', false );
}
然后在 wp-config.php
中定义:
define( 'WP_DEBUG', true );
那么,最终 WP_DEBUG
的值就是 true
。
五、 总结
default-constants.php
文件定义了 WordPress 的核心常量,这些常量决定了 WordPress 的基本运行环境和行为。理解这些常量,可以帮助你更好地理解 WordPress 的运作方式,也才能更好地进行定制和优化。
记住,wp-config.php
文件可以覆盖 default-constants.php
中定义的常量,所以可以通过修改 wp-config.php
文件来配置 WordPress。
好了,今天的讲座就到这里。 希望大家有所收获,下次有机会再见!