Skip to content

Instantly share code, notes, and snippets.

@MikeNGarrett
Last active March 13, 2024 17:43
Star You must be signed in to star a gist
Save MikeNGarrett/e20d77ca8ba4ae62adf5 to your computer and use it in GitHub Desktop.
All those damned wp-config constants you can never remember.
<?php
// PHP memory limit for this site
define( 'WP_MEMORY_LIMIT', '128M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M' ); // Increase admin-side memory limit.
// Database
define( 'WP_ALLOW_REPAIR', true ); // Allow WordPress to automatically repair your database.
define( 'DO_NOT_UPGRADE_GLOBAL_TABLES', true ); // Don't make database upgrades on global tables (like users)
// Explicitely setting url
define( 'WP_HOME', 'http://domain.com' );
define( 'WP_SITEURL', 'http://domain.com' );
// Set url to... whatever.
define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] );
define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] );
// Set default theme
define( 'WP_DEFAULT_THEME', 'twentytwentyone' );
// Temporary for causing a site to relocate. Remove after login.
define( 'RELOCATE', true );
// Allow WordPress to update files
define( 'FS_METHOD', 'direct' );
define( 'FS_CHMOD_DIR', ( 0755 & ~ umask() ) ); // change permissions of directories
define( 'FS_CHMOD_FILE', ( 0644 & ~ umask() ) ); // change permissions of files
// Set the directory files should be downloaded to before they're moved.
// This is usually set in the PHP conf
define( 'WP_TEMP_DIR', '/Applications/MAMP/tmp/php/' ); // this one is for default MAMP setup
// Content, plugin, and template paths
define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' ); // Full URL to wp-content
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // No trailing slash, full paths only to wp-content
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' ); // Full path, no trailing slash.
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' ); // Full URL, no trailing slash.
define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH. For back compat.
define( 'WPMU_PLUGIN_DIR', WP_CONTENT_DIR . '/mu-plugins' ); // Full path, no trailing slash.
define( 'WPMU_PLUGIN_URL', WP_CONTENT_URL . '/mu-plugins' ); // Full URL, no trailing slash.
define( 'MUPLUGINDIR', 'wp-content/mu-plugins' ); // Relative to ABSPATH. For back compat.
define( 'TEMPLATEPATH', get_template_directory() );
define( 'STYLESHEETPATH', get_stylesheet_directory() );
// Set post revisions to something feasible
define( 'WP_POST_REVISIONS', 15 );
// Autosave interval of post revisions in seconds.
define( 'AUTOSAVE_INTERVAL', 160 ); // Seconds
// Set cookie domain for login cookies
// Very helpful if you're getting cookie errors during login
define( 'COOKIE_DOMAIN', '.domain.com' ); // Domain and all subdomains
define( 'COOKIE_DOMAIN', 'domain.com' ); // only root domain
define( 'COOKIE_DOMAIN', 'www.domain.com' ); // only subdomain
// More cookie constants
define( 'COOKIEPATH', $_SERVER['HTTP_HOST'] . '/' ); // You should set this explicitely.
define( 'SITECOOKIEPATH', $_SERVER['HTTP_HOST'] . '/' ); // You should set this explicitely.
define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
define( 'PLUGINS_COOKIE_PATH', preg_replace( '|https?://[^/]+|i', '', WP_PLUGIN_URL ) );
// Cookie names.
define( 'USER_COOKIE', 'wordpressuser_' . COOKIEHASH );
define( 'PASS_COOKIE', 'wordpresspass_' . COOKIEHASH );
define( 'AUTH_COOKIE', 'wordpress_' . COOKIEHASH );
define( 'SECURE_AUTH_COOKIE', 'wordpress_sec_' . COOKIEHASH );
define( 'LOGGED_IN_COOKIE', 'wordpress_logged_in_' . COOKIEHASH );
define( 'RECOVERY_MODE_COOKIE', 'wordpress_rec_' . COOKIEHASH );
// WordPress debug on and off
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_LOCAL_DEV', true ); // Magic switch for local dev
// Script and style debug
define( 'CONCATENATE_SCRIPTS', false ); // Causes WordPress scripts to be included separately
define( 'SCRIPT_DEBUG', true ); // Uses unminified scripts
define( 'SAVEQUERIES', true ); // Requires analyzing the global $wpdb object.
define( 'COMPRESS_SCRIPTS', true );
define( 'COMPRESS_CSS', true );
define( 'ENFORCE_GZIP', true );
// Disable WP cron in favor of server cron
define( 'DISABLE_WP_CRON', true );
define( 'ALTERNATE_WP_CRON', true ); // alternate method of firing cron in the background when initiated by end users.
define( 'WP_CRON_LOCK_TIMEOUT', MINUTE_IN_SECONDS ); // limit cron runs to a certain interval.
// SSL
define( 'FORCE_SSL_LOGIN', true ); // Only secrue the registration/login process
define( 'FORCE_SSL_ADMIN', true ); // Force SSL for the whole WordPress admin
// The "timthumb" fix
define( 'WP_HTTP_BLOCK_EXTERNAL', true );
define( 'WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,*.github.com' ); // Only allow particular hosts in
// Modifying files
define( 'DISALLOW_FILE_EDIT', true ); // Kill the WordPress file editor
define( 'DISALLOW_FILE_MODS', true ); // Don't allow users to update core, plugins, or themes
define( 'IMAGE_EDIT_OVERWRITE', true ); // Allow editing images to replace the originals
// Changing WordPress updates.
define( 'AUTOMATIC_UPDATER_DISABLED', true ); // Disable all WordPress auto-updates
define( 'WP_AUTO_UPDATE_CORE', false ); // Only disable core updates
define( 'WP_AUTO_UPDATE_CORE', 'minor' ); // Only enable minor core updates
// Change languages
define( 'WPLANG', 'de_DE' );
define( 'WP_LANG_DIR', dirname(__FILE__) . 'wordpress/languages' );
// Trash
define( 'EMPTY_TRASH_DAYS', 30 ); // Number of days to wait before emptying the trash
define( 'MEDIA_TRASH', false ); // Whether to allow media items to use the trash functionality.
// Dev tools
define( 'SHORTINIT', false ); // Disable most of WordPress. Useful for fast responses for custom integrations.
// https://wordpress.stackexchange.com/questions/12919/what-is-the-constant-wp-use-themes-for
define( 'WP_USE_THEMES', true ); // Override if you love WordPress, but hate themes.
// Recovery mode and fatal error handling.
define( 'WP_SANDBOX_SCRAPING', true ); // Turn off WSOD Protection (and don't send email notification)
define( 'WP_START_TIMESTAMP', microtime( true ) ); // Modify the WordPress start time.
define( 'RECOVERY_MODE_EMAIL', 'mike@example.com' ); // Set a recovery mode email.
@mcguffin
Copy link

Thanks, very helpful :)

I found this little fellow was missing:

// Turn off WSOD Protection (and don't send email notification)
define( 'WP_SANDBOX_SCRAPING', true );

@MikeNGarrett
Copy link
Author

I just added sandbox scraping. Thanks for mentioning it.

There are a ton of constants that are useful in different scenarios. I recommending checking out the default constants file: https://github.com/WordPress/WordPress/blob/master/wp-includes/default-constants.php

@milindmore22
Copy link

Thanks
here are few missing to boost site speed a little

define('COMPRESS_SCRIPTS', true);
define('COMPRESS_CSS', true);
define('ENFORCE_GZIP', true);

@MikeNGarrett
Copy link
Author

Thanks for the additions!

@crewstyle
Copy link

Hi @MikeNGarrett !

Pay attention to these two constants that you cannot override:

define('SHORTINIT', false); defined in wp-includes/ms-files.php (line 11)
define('WP_FEATURE_BETTER_PASSWORDS', true); defined in wp-includes/default-constants.php (line 123)

You cannot override them because WP team didn't check if the constant is already defined or not.
If you use them in your wp-config.php, you'll get a "Notice: Constant WP_FEATURE_BETTER_PASSWORDS already defined"

BTW, thanks for this ;)

Sources:
https://github.com/WordPress/WordPress/blob/master/wp-includes/ms-files.php#L11
https://github.com/WordPress/WordPress/blob/master/wp-includes/default-constants.php#L123

@MikeNGarrett
Copy link
Author

Hi @MikeNGarrett !

Pay attention to these two constants that you cannot override:

define('SHORTINIT', false); defined in wp-includes/ms-files.php (line 11)
define('WP_FEATURE_BETTER_PASSWORDS', true); defined in wp-includes/default-constants.php (line 123)

You cannot override them because WP team didn't check if the constant is already defined or not.
If you use them in your wp-config.php, you'll get a "Notice: Constant WP_FEATURE_BETTER_PASSWORDS already defined"

BTW, thanks for this ;)

Sources:
https://github.com/WordPress/WordPress/blob/master/wp-includes/ms-files.php#L11
https://github.com/WordPress/WordPress/blob/master/wp-includes/default-constants.php#L123

You're right about WP_FEATURE_BETTER_PASSWORDS, but you're wrong about SHORTINIT
https://github.com/WordPress/WordPress/blob/master/wp-includes/default-constants.php#L118

@crewstyle
Copy link

Hi @MikeNGarrett,

In a usual use of WP, you're right for SHORTINIT: the system gets index.php -> wp-blog-header.php -> wp-load.php -> wp-config.php -> wp-settings.php -> wp-includes/default-constants.php. If you define your constant in wp-config.php, WP will check it on default-constants.php file. Everything works welle.

But if you use WP as a multisite and you make an upload, WP will use the wp-includes/ms-files.php as a direct call. It will define the SHORTINIT constant and call wp-load.php -> wp-config.php (error !)

That's why I do not recommand to override it.

@deltafactory
Copy link

Nominating WP_DISABLE_FATAL_ERROR_HANDLER to the Fatal error handling section.

@gerardreches
Copy link

What about define( 'UPLOADS', 'uploads' )?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment