WordPress源码深度解析之:`wp-includes/default-constants.php`:WordPress核心常量的定义与作用。

各位观众老爷,晚上好!我是今晚的讲师,今天咱就来扒一扒WordPress的“骨架”——wp-includes/default_constants.php

这个文件啊,就像一个房子的地基,里面定义了一堆核心常量,这些常量决定了WordPress的基本运行环境和行为。搞清楚它们,你才能真正理解WordPress的运作方式,也才能更好地进行定制和优化。

咱们开始吧!

一、 常量是什么?为什么要定义常量?

首先,得弄明白啥是常量。简单来说,常量就是一个名字,指向一个固定的值。这个值在程序运行过程中,不能被修改。

那为啥要用常量呢?

  • 提高代码可读性: 比如,用 WP_DEBUG 代替 truefalse,一看就知道是调试模式。
  • 避免硬编码: 把一些配置信息放在常量里,方便统一修改,不用满地找数字改。
  • 防止意外修改: 常量的值不能被修改,保证了程序的稳定性。
  • 条件判断: 很多插件和主题会根据某些常量的值来决定是否执行某些代码。

二、 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_DIRWP_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。

好了,今天的讲座就到这里。 希望大家有所收获,下次有机会再见!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注