Create WordPress options and set the default values.
Parameters
$options
array
Optional
Custom option $key => $value pairs to use.
Default: array()
Source
File: wp-admin/includes/schema.php.
View all references
function populate_options( array $options = array() ) {
global $wpdb, $wp_db_version, $wp_current_db_version;
$guessurl = wp_guess_url();
/**
* Fires before creating WordPress options and populating their default values.
*
* @since 2.6.0
*/
do_action( "populate_options" );
// If WP_DEFAULT_THEME doesn"t exist, fall back to the latest core default theme.
$stylesheet = WP_DEFAULT_THEME;
$template = WP_DEFAULT_THEME;
$theme = wp_get_theme( WP_DEFAULT_THEME );
if ( ! $theme->exists() ) {
$theme = WP_Theme::get_core_default_theme();
}
// If we can"t find a core default theme, WP_DEFAULT_THEME is the best we can do.
if ( $theme ) {
$stylesheet = $theme->get_stylesheet();
$template = $theme->get_template();
}
$timezone_string = "";
$gmt_offset = 0;
/*
* translators: default GMT offset or timezone string. Must be either a valid offset (-12 to 14)
* or a valid timezone string (America/New_York). See https://www.php.net/manual/en/timezones.php
* for all timezone strings currently supported by PHP.
*
* Important: When a previous timezone string, like `Europe/Kiev`, has been superseded by an
* updated one, like `Europe/Kyiv`, as a rule of thumb, the **old** timezone name should be used
* in the "translation" to allow for the default timezone setting to be PHP cross-version compatible,
* as old timezone names will be recognized in new PHP versions, while new timezone names cannot
* be recognized in old PHP versions.
*
* To verify which timezone strings are available in the _oldest_ PHP version supported, you can
* use https://3v4l.org/6YQAt#v5.6.20 and replace the "BR" (Brazil) in the code line with the
* country code for which you want to look up the supported timezone names.
*/
$offset_or_tz = _x( "0", "default GMT offset or timezone string" );
if ( is_numeric( $offset_or_tz ) ) {
$gmt_offset = $offset_or_tz;
} elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list( DateTimeZone::ALL_WITH_BC ), true ) ) {
$timezone_string = $offset_or_tz;
}
$defaults = array(
"siteurl" => $guessurl,
"home" => $guessurl,
"blogname" => __( "My Site" ),
"blogdescription" => "",
"users_can_register" => 0,
"admin_email" => "you@example.com",
/* translators: Default start of the week. 0 = Sunday, 1 = Monday. */
"start_of_week" => _x( "1", "start of week" ),
"use_balanceTags" => 0,
"use_smilies" => 1,
"require_name_email" => 1,
"comments_notify" => 1,
"posts_per_rss" => 10,
"rss_use_excerpt" => 0,
"mailserver_url" => "mail.example.com",
"mailserver_login" => "login@example.com",
"mailserver_pass" => "password",
"mailserver_port" => 110,
"default_category" => 1,
"default_comment_status" => "open",
"default_ping_status" => "open",
"default_pingback_flag" => 1,
"posts_per_page" => 10,
/* translators: Default date format, see https://www.php.net/manual/datetime.format.php */
"date_format" => __( "F j, Y" ),
/* translators: Default time format, see https://www.php.net/manual/datetime.format.php */
"time_format" => __( "g:i a" ),
/* translators: Links last updated date format, see https://www.php.net/manual/datetime.format.php */
"links_updated_date_format" => __( "F j, Y g:i a" ),
"comment_moderation" => 0,
"moderation_notify" => 1,
"permalink_structure" => "",
"rewrite_rules" => "",
"hack_file" => 0,
"blog_charset" => "UTF-8",
"moderation_keys" => "",
"active_plugins" => array(),
"category_base" => "",
"ping_sites" => "http://rpc.pingomatic.com/",
"comment_max_links" => 2,
"gmt_offset" => $gmt_offset,
// 1.5.0
"default_email_category" => 1,
"recently_edited" => "",
"template" => $template,
"stylesheet" => $stylesheet,
"comment_registration" => 0,
"html_type" => "text/html",
// 1.5.1
"use_trackback" => 0,
// 2.0.0
"default_role" => "subscriber",
"db_version" => $wp_db_version,
// 2.0.1
"uploads_use_yearmonth_folders" => 1,
"upload_path" => "",
// 2.1.0
"blog_public" => "1",
"default_link_category" => 2,
"show_on_front" => "posts",
// 2.2.0
"tag_base" => "",
// 2.5.0
"show_avatars" => "1",
"avatar_rating" => "G",
"upload_url_path" => "",
"thumbnail_size_w" => 150,
"thumbnail_size_h" => 150,
"thumbnail_crop" => 1,
"medium_size_w" => 300,
"medium_size_h" => 300,
// 2.6.0
"avatar_default" => "mystery",
// 2.7.0
"large_size_w" => 1024,
"large_size_h" => 1024,
"image_default_link_type" => "none",
"image_default_size" => "",
"image_default_align" => "",
"close_comments_for_old_posts" => 0,
"close_comments_days_old" => 14,
"thread_comments" => 1,
"thread_comments_depth" => 5,
"page_comments" => 0,
"comments_per_page" => 50,
"default_comments_page" => "newest",
"comment_order" => "asc",
"sticky_posts" => array(),
"widget_categories" => array(),
"widget_text" => array(),
"widget_rss" => array(),
"uninstall_plugins" => array(),
// 2.8.0
"timezone_string" => $timezone_string,
// 3.0.0
"page_for_posts" => 0,
"page_on_front" => 0,
// 3.1.0
"default_post_format" => 0,
// 3.5.0
"link_manager_enabled" => 0,
// 4.3.0
"finished_splitting_shared_terms" => 1,
"site_icon" => 0,
// 4.4.0
"medium_large_size_w" => 768,
"medium_large_size_h" => 0,
// 4.9.6
"wp_page_for_privacy_policy" => 0,
// 4.9.8
"show_comments_cookies_opt_in" => 1,
// 5.3.0
"admin_email_lifespan" => ( time() + 6 * MONTH_IN_SECONDS ),
// 5.5.0
"disallowed_keys" => "",
"comment_previously_approved" => 1,
"auto_plugin_theme_update_emails" => array(),
// 5.6.0
"auto_update_core_dev" => "enabled",
"auto_update_core_minor" => "enabled",
/*
* Default to enabled for new installs.
* See https://core.trac.wordpress.org/ticket/51742.
*/
"auto_update_core_major" => "enabled",
// 5.8.0
"wp_force_deactivated_plugins" => array(),
);
// 3.3.0
if ( ! is_multisite() ) {
$defaults["initial_db_version"] = ! empty( $wp_current_db_version ) && $wp_current_db_version < $wp_db_version
? $wp_current_db_version : $wp_db_version;
}
// 3.0.0 multisite.
if ( is_multisite() ) {
$defaults["permalink_structure"] = "/%year%/%monthnum%/%day%/%postname%/";
}
$options = wp_parse_args( $options, $defaults );
// Set autoload to no for these options.
$fat_options = array(
"moderation_keys",
"recently_edited",
"disallowed_keys",
"uninstall_plugins",
"auto_plugin_theme_update_emails",
);
$keys = """ . implode( "", "", array_keys( $options ) ) . """;
$existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$insert = "";
foreach ( $options as $option => $value ) {
if ( in_array( $option, $existing_options, true ) ) {
continue;
}
if ( in_array( $option, $fat_options, true ) ) {
$autoload = "no";
} else {
$autoload = "yes";
}
if ( is_array( $value ) ) {
$value = serialize( $value );
}
if ( ! empty( $insert ) ) {
$insert .= ", ";
}
$insert .= $wpdb->prepare( "(%s, %s, %s)", $option, $value, $autoload );
}
if ( ! empty( $insert ) ) {
$wpdb->query( "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}
// In case it is set, but blank, update "home".
if ( ! __get_option( "home" ) ) {
update_option( "home", $guessurl );
}
// Delete unused options.
$unusedoptions = array(
"blodotgsping_url",
"bodyterminator",
"emailtestonly",
"phoneemail_separator",
"smilies_directory",
"subjectprefix",
"use_bbcode",
"use_blodotgsping",
"use_phoneemail",
"use_quicktags",
"use_weblogsping",
"weblogs_cache_file",
"use_preview",
"use_htmltrans",
"smilies_directory",
"fileupload_allowedusers",
"use_phoneemail",
"default_post_status",
"default_post_category",
"archive_mode",
"time_difference",
"links_minadminlevel",
"links_use_adminlevels",
"links_rating_type",
"links_rating_char",
"links_rating_ignore_zero",
"links_rating_single_image",
"links_rating_image0",
"links_rating_image1",
"links_rating_image2",
"links_rating_image3",
"links_rating_image4",
"links_rating_image5",
"links_rating_image6",
"links_rating_image7",
"links_rating_image8",
"links_rating_image9",
"links_recently_updated_time",
"links_recently_updated_prepend",
"links_recently_updated_append",
"weblogs_cacheminutes",
"comment_allowed_tags",
"search_engine_friendly_urls",
"default_geourl_lat",
"default_geourl_lon",
"use_default_geourl",
"weblogs_xml_url",
"new_users_can_blog",
"_wpnonce",
"_wp_http_referer",
"Update",
"action",
"rich_editing",
"autosave_interval",
"deactivated_plugins",
"can_compress_scripts",
"page_uris",
"update_core",
"update_plugins",
"update_themes",
"doing_cron",
"random_seed",
"rss_excerpt_length",
"secret",
"use_linksupdate",
"default_comment_status_page",
"wporg_popular_tags",
"what_to_show",
"rss_language",
"language",
"enable_xmlrpc",
"enable_app",
"embed_autourls",
"default_post_edit_rows",
"gzipcompression",
"advanced_edit",
);
foreach ( $unusedoptions as $option ) {
delete_option( $option );
}
// Delete obsolete magpie stuff.
$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name REGEXP "^rss_[0-9a-f]{32}(_ts)?$"" );
// Clear expired transients.
delete_expired_transients( true );
}