2004-09-05 01:22:17 +00:00
<? php
2008-10-02 01:03:26 +00:00
/**
2008-10-10 18:21:16 +00:00
* WordPress Administration Scheme API
2008-10-02 01:03:26 +00:00
*
* Here we keep the DB structure and option values.
*
* @package WordPress
* @subpackage Administration
*/
2015-05-29 02:06:31 +00:00
/**
* Declare these as global in case schema.php is included from a function.
*
* @global wpdb $wpdb
* @global array $wp_queries
* @global string $charset_collate
*/
2011-10-06 00:21:24 +00:00
global $wpdb , $wp_queries , $charset_collate ;
2008-10-10 18:21:16 +00:00
/**
* The database character collate.
*/
2012-08-08 06:13:48 +00:00
$charset_collate = $wpdb -> get_charset_collate ();
2007-02-02 00:04:35 +00:00
2011-10-06 00:21:24 +00:00
/**
* Retrieve the SQL for creating database tables.
*
* @since 3.3.0
*
2015-10-14 23:44:25 +00:00
* @global wpdb $wpdb WordPress database abstraction object.
2015-05-29 02:06:31 +00:00
*
2011-10-06 00:21:24 +00:00
* @param string $scope Optional. The tables for which to retrieve SQL. Can be all, global, ms_global, or blog tables. Defaults to all.
2016-01-28 03:35:27 +00:00
* @param int $blog_id Optional. The site ID for which to retrieve SQL. Default is the current site ID.
2011-10-06 00:21:24 +00:00
* @return string The SQL needed to create the requested tables.
*/
function wp_get_db_schema ( $scope = 'all' , $blog_id = null ) {
global $wpdb ;
2016-05-23 06:38:27 +00:00
$charset_collate = $wpdb -> get_charset_collate ();
2011-10-06 00:21:24 +00:00
2017-11-30 23:11:00 +00:00
if ( $blog_id && $blog_id != $wpdb -> blogid ) {
2011-10-06 00:21:24 +00:00
$old_blog_id = $wpdb -> set_blog_id ( $blog_id );
2017-11-30 23:11:00 +00:00
}
2011-10-06 00:21:24 +00:00
// Engage multisite if in the middle of turning it on from network.php.
$is_multisite = is_multisite () || ( defined ( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK );
2015-02-06 04:51:22 +00:00
/*
* Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
* As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
* used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
*/
$max_index_length = 191 ;
2011-10-06 00:21:24 +00:00
// Blog specific tables.
2015-09-25 03:59:27 +00:00
$blog_tables = "CREATE TABLE $wpdb->termmeta (
meta_id bigint(20) unsigned NOT NULL auto_increment,
term_id bigint(20) unsigned NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
2015-10-08 11:09:26 +00:00
PRIMARY KEY (meta_id),
2015-09-25 03:59:27 +00:00
KEY term_id (term_id),
KEY meta_key (meta_key( $max_index_length ))
) $charset_collate ;
CREATE TABLE $wpdb->terms (
2009-03-31 21:57:51 +00:00
term_id bigint(20) unsigned NOT NULL auto_increment,
2008-08-05 18:27:02 +00:00
name varchar(200) NOT NULL default '',
2007-05-22 05:12:38 +00:00
slug varchar(200) NOT NULL default '',
term_group bigint(10) NOT NULL default 0,
PRIMARY KEY (term_id),
2015-02-06 04:51:22 +00:00
KEY slug (slug( $max_index_length )),
KEY name (name( $max_index_length ))
2007-05-22 05:12:38 +00:00
) $charset_collate ;
CREATE TABLE $wpdb->term_taxonomy (
2009-03-31 21:57:51 +00:00
term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,
term_id bigint(20) unsigned NOT NULL default 0,
2007-05-22 05:12:38 +00:00
taxonomy varchar(32) NOT NULL default '',
description longtext NOT NULL,
2009-03-31 21:57:51 +00:00
parent bigint(20) unsigned NOT NULL default 0,
2007-05-22 05:12:38 +00:00
count bigint(20) NOT NULL default 0,
2007-05-25 22:57:52 +00:00
PRIMARY KEY (term_taxonomy_id),
2009-03-06 08:26:45 +00:00
UNIQUE KEY term_id_taxonomy (term_id,taxonomy),
KEY taxonomy (taxonomy)
2007-05-22 05:12:38 +00:00
) $charset_collate ;
CREATE TABLE $wpdb->term_relationships (
2009-03-31 21:57:51 +00:00
object_id bigint(20) unsigned NOT NULL default 0,
term_taxonomy_id bigint(20) unsigned NOT NULL default 0,
2008-02-14 17:17:57 +00:00
term_order int(11) NOT NULL default 0,
2007-05-25 22:57:52 +00:00
PRIMARY KEY (object_id,term_taxonomy_id),
KEY term_taxonomy_id (term_taxonomy_id)
2007-02-02 00:04:35 +00:00
) $charset_collate ;
2009-09-17 20:17:33 +00:00
CREATE TABLE $wpdb->commentmeta (
meta_id bigint(20) unsigned NOT NULL auto_increment,
comment_id bigint(20) unsigned NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
2009-09-21 18:09:21 +00:00
KEY comment_id (comment_id),
2015-02-06 04:51:22 +00:00
KEY meta_key (meta_key( $max_index_length ))
2009-09-17 20:17:33 +00:00
) $charset_collate ;
2004-09-05 01:22:17 +00:00
CREATE TABLE $wpdb->comments (
2005-02-04 22:55:11 +00:00
comment_ID bigint(20) unsigned NOT NULL auto_increment,
2009-03-31 21:57:51 +00:00
comment_post_ID bigint(20) unsigned NOT NULL default '0',
2004-09-05 01:22:17 +00:00
comment_author tinytext NOT NULL,
comment_author_email varchar(100) NOT NULL default '',
comment_author_url varchar(200) NOT NULL default '',
comment_author_IP varchar(100) NOT NULL default '',
comment_date datetime NOT NULL default '0000-00-00 00:00:00',
comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
comment_content text NOT NULL,
comment_karma int(11) NOT NULL default '0',
2008-02-05 21:05:56 +00:00
comment_approved varchar(20) NOT NULL default '1',
2004-09-05 01:43:40 +00:00
comment_agent varchar(255) NOT NULL default '',
2004-09-05 07:44:58 +00:00
comment_type varchar(20) NOT NULL default '',
2009-04-01 16:10:14 +00:00
comment_parent bigint(20) unsigned NOT NULL default '0',
2009-03-31 21:57:51 +00:00
user_id bigint(20) unsigned NOT NULL default '0',
2004-09-05 01:22:17 +00:00
PRIMARY KEY (comment_ID),
2008-02-05 18:04:17 +00:00
KEY comment_post_ID (comment_post_ID),
2008-02-13 19:15:30 +00:00
KEY comment_approved_date_gmt (comment_approved,comment_date_gmt),
2010-02-19 17:56:40 +00:00
KEY comment_date_gmt (comment_date_gmt),
2014-07-16 15:54:16 +00:00
KEY comment_parent (comment_parent),
KEY comment_author_email (comment_author_email(10))
2007-02-02 00:04:35 +00:00
) $charset_collate ;
2004-09-05 01:22:17 +00:00
CREATE TABLE $wpdb->links (
2009-03-31 21:57:51 +00:00
link_id bigint(20) unsigned NOT NULL auto_increment,
2004-09-05 01:22:17 +00:00
link_url varchar(255) NOT NULL default '',
link_name varchar(255) NOT NULL default '',
link_image varchar(255) NOT NULL default '',
link_target varchar(25) NOT NULL default '',
link_description varchar(255) NOT NULL default '',
2008-02-05 21:05:56 +00:00
link_visible varchar(20) NOT NULL default 'Y',
2009-04-01 16:10:14 +00:00
link_owner bigint(20) unsigned NOT NULL default '1',
2004-09-05 01:22:17 +00:00
link_rating int(11) NOT NULL default '0',
link_updated datetime NOT NULL default '0000-00-00 00:00:00',
link_rel varchar(255) NOT NULL default '',
2005-12-09 19:04:12 +00:00
link_notes mediumtext NOT NULL,
2004-09-05 01:22:17 +00:00
link_rss varchar(255) NOT NULL default '',
PRIMARY KEY (link_id),
KEY link_visible (link_visible)
2007-02-02 00:04:35 +00:00
) $charset_collate ;
2004-09-05 01:22:17 +00:00
CREATE TABLE $wpdb->options (
2009-03-31 21:57:51 +00:00
option_id bigint(20) unsigned NOT NULL auto_increment,
2015-09-11 01:26:24 +00:00
option_name varchar(191) NOT NULL default '',
2005-02-01 09:52:36 +00:00
option_value longtext NOT NULL,
2008-02-05 21:05:56 +00:00
autoload varchar(20) NOT NULL default 'yes',
2009-11-19 16:42:07 +00:00
PRIMARY KEY (option_id),
2009-12-07 13:57:18 +00:00
UNIQUE KEY option_name (option_name)
2007-02-02 00:04:35 +00:00
) $charset_collate ;
2004-09-05 01:22:17 +00:00
CREATE TABLE $wpdb->postmeta (
2009-03-31 21:57:51 +00:00
meta_id bigint(20) unsigned NOT NULL auto_increment,
post_id bigint(20) unsigned NOT NULL default '0',
2004-09-05 01:22:17 +00:00
meta_key varchar(255) default NULL,
2005-06-12 20:49:13 +00:00
meta_value longtext,
2004-09-05 01:22:17 +00:00
PRIMARY KEY (meta_id),
KEY post_id (post_id),
2015-02-06 04:51:22 +00:00
KEY meta_key (meta_key( $max_index_length ))
2007-02-02 00:04:35 +00:00
) $charset_collate ;
2004-09-05 01:22:17 +00:00
CREATE TABLE $wpdb->posts (
2005-02-04 22:55:11 +00:00
ID bigint(20) unsigned NOT NULL auto_increment,
2009-03-31 21:57:51 +00:00
post_author bigint(20) unsigned NOT NULL default '0',
2004-09-05 01:22:17 +00:00
post_date datetime NOT NULL default '0000-00-00 00:00:00',
post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
2005-02-02 09:41:06 +00:00
post_content longtext NOT NULL,
2004-09-05 01:22:17 +00:00
post_title text NOT NULL,
2005-12-09 19:04:12 +00:00
post_excerpt text NOT NULL,
2008-02-05 21:05:56 +00:00
post_status varchar(20) NOT NULL default 'publish',
comment_status varchar(20) NOT NULL default 'open',
ping_status varchar(20) NOT NULL default 'open',
2016-09-12 02:28:30 +00:00
post_password varchar(255) NOT NULL default '',
2004-09-05 01:22:17 +00:00
post_name varchar(200) NOT NULL default '',
2005-12-09 19:04:12 +00:00
to_ping text NOT NULL,
pinged text NOT NULL,
2004-09-05 01:22:17 +00:00
post_modified datetime NOT NULL default '0000-00-00 00:00:00',
post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00',
2012-02-08 14:51:18 +00:00
post_content_filtered longtext NOT NULL,
2009-03-31 21:57:51 +00:00
post_parent bigint(20) unsigned NOT NULL default '0',
2004-09-05 01:43:40 +00:00
guid varchar(255) NOT NULL default '',
2004-10-05 08:27:13 +00:00
menu_order int(11) NOT NULL default '0',
2006-04-02 00:33:10 +00:00
post_type varchar(20) NOT NULL default 'post',
2005-11-23 00:38:56 +00:00
post_mime_type varchar(100) NOT NULL default '',
2005-11-16 06:29:36 +00:00
comment_count bigint(20) NOT NULL default '0',
2004-09-05 01:22:17 +00:00
PRIMARY KEY (ID),
2015-02-06 04:51:22 +00:00
KEY post_name (post_name( $max_index_length )),
2008-10-22 22:03:41 +00:00
KEY type_status_date (post_type,post_status,post_date,ID),
2010-03-03 19:08:30 +00:00
KEY post_parent (post_parent),
KEY post_author (post_author)
2011-10-06 00:21:24 +00:00
) $charset_collate ; \n " ;
// Single site users table. The multisite flavor of the users table is handled below.
$users_single_table = "CREATE TABLE $wpdb->users (
2005-02-04 22:55:11 +00:00
ID bigint(20) unsigned NOT NULL auto_increment,
user_login varchar(60) NOT NULL default '',
2015-11-15 14:19:28 +00:00
user_pass varchar(255) NOT NULL default '',
2004-09-05 01:22:17 +00:00
user_nicename varchar(50) NOT NULL default '',
user_email varchar(100) NOT NULL default '',
user_url varchar(100) NOT NULL default '',
2004-12-17 19:27:35 +00:00
user_registered datetime NOT NULL default '0000-00-00 00:00:00',
2015-11-15 14:19:28 +00:00
user_activation_key varchar(255) NOT NULL default '',
2004-09-05 01:22:17 +00:00
user_status int(11) NOT NULL default '0',
2005-06-12 20:49:13 +00:00
display_name varchar(250) NOT NULL default '',
2004-09-05 01:22:17 +00:00
PRIMARY KEY (ID),
2007-09-11 18:13:56 +00:00
KEY user_login_key (user_login),
2016-02-23 23:21:26 +00:00
KEY user_nicename (user_nicename),
KEY user_email (user_email)
2011-10-06 00:21:24 +00:00
) $charset_collate ; \n " ;
// Multisite users table
$users_multi_table = "CREATE TABLE $wpdb->users (
ID bigint(20) unsigned NOT NULL auto_increment,
user_login varchar(60) NOT NULL default '',
2015-11-15 14:19:28 +00:00
user_pass varchar(255) NOT NULL default '',
2011-10-06 00:21:24 +00:00
user_nicename varchar(50) NOT NULL default '',
user_email varchar(100) NOT NULL default '',
user_url varchar(100) NOT NULL default '',
user_registered datetime NOT NULL default '0000-00-00 00:00:00',
2015-11-15 14:19:28 +00:00
user_activation_key varchar(255) NOT NULL default '',
2011-10-06 00:21:24 +00:00
user_status int(11) NOT NULL default '0',
display_name varchar(250) NOT NULL default '',
spam tinyint(2) NOT NULL default '0',
deleted tinyint(2) NOT NULL default '0',
PRIMARY KEY (ID),
KEY user_login_key (user_login),
2016-02-23 23:21:26 +00:00
KEY user_nicename (user_nicename),
KEY user_email (user_email)
2011-10-06 00:21:24 +00:00
) $charset_collate ; \n " ;
2014-07-17 09:14:16 +00:00
// Usermeta.
2011-10-06 00:21:24 +00:00
$usermeta_table = "CREATE TABLE $wpdb->usermeta (
2009-03-31 21:57:51 +00:00
umeta_id bigint(20) unsigned NOT NULL auto_increment,
user_id bigint(20) unsigned NOT NULL default '0',
2005-06-12 20:49:13 +00:00
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (umeta_id),
KEY user_id (user_id),
2015-02-06 04:51:22 +00:00
KEY meta_key (meta_key( $max_index_length ))
2011-10-06 00:21:24 +00:00
) $charset_collate ; \n " ;
// Global tables
2017-11-30 23:11:00 +00:00
if ( $is_multisite ) {
2011-10-06 00:21:24 +00:00
$global_tables = $users_multi_table . $usermeta_table ;
2017-11-30 23:11:00 +00:00
} else {
2011-10-06 00:21:24 +00:00
$global_tables = $users_single_table . $usermeta_table ;
2017-11-30 23:11:00 +00:00
}
2011-10-06 00:21:24 +00:00
// Multisite global tables.
$ms_global_tables = "CREATE TABLE $wpdb->blogs (
blog_id bigint(20) NOT NULL auto_increment,
site_id bigint(20) NOT NULL default '0',
domain varchar(200) NOT NULL default '',
path varchar(100) NOT NULL default '',
registered datetime NOT NULL default '0000-00-00 00:00:00',
last_updated datetime NOT NULL default '0000-00-00 00:00:00',
public tinyint(2) NOT NULL default '1',
2013-09-15 23:12:11 +00:00
archived tinyint(2) NOT NULL default '0',
2011-10-06 00:21:24 +00:00
mature tinyint(2) NOT NULL default '0',
spam tinyint(2) NOT NULL default '0',
deleted tinyint(2) NOT NULL default '0',
lang_id int(11) NOT NULL default '0',
PRIMARY KEY (blog_id),
KEY domain (domain(50),path(5)),
KEY lang_id (lang_id)
) $charset_collate ;
CREATE TABLE $wpdb->blog_versions (
blog_id bigint(20) NOT NULL default '0',
db_version varchar(20) NOT NULL default '',
last_updated datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (blog_id),
KEY db_version (db_version)
) $charset_collate ;
2018-03-16 02:15:31 +00:00
CREATE TABLE $wpdb->blogmeta (
meta_id bigint(20) unsigned NOT NULL auto_increment,
blog_id bigint(20) NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY meta_key (meta_key( $max_index_length )),
KEY blog_id (blog_id)
) $charset_collate ;
2011-10-06 00:21:24 +00:00
CREATE TABLE $wpdb->registration_log (
ID bigint(20) NOT NULL auto_increment,
email varchar(255) NOT NULL default '',
IP varchar(30) NOT NULL default '',
blog_id bigint(20) NOT NULL default '0',
date_registered datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (ID),
KEY IP (IP)
) $charset_collate ;
CREATE TABLE $wpdb->site (
id bigint(20) NOT NULL auto_increment,
domain varchar(200) NOT NULL default '',
path varchar(100) NOT NULL default '',
PRIMARY KEY (id),
2015-02-06 04:51:22 +00:00
KEY domain (domain(140),path(51))
2011-10-06 00:21:24 +00:00
) $charset_collate ;
CREATE TABLE $wpdb->sitemeta (
meta_id bigint(20) NOT NULL auto_increment,
site_id bigint(20) NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
2015-02-06 04:51:22 +00:00
KEY meta_key (meta_key( $max_index_length )),
2011-10-06 00:21:24 +00:00
KEY site_id (site_id)
) $charset_collate ;
CREATE TABLE $wpdb->signups (
2013-08-30 04:30:08 +00:00
signup_id bigint(20) NOT NULL auto_increment,
2011-10-06 00:21:24 +00:00
domain varchar(200) NOT NULL default '',
path varchar(100) NOT NULL default '',
title longtext NOT NULL,
user_login varchar(60) NOT NULL default '',
user_email varchar(100) NOT NULL default '',
registered datetime NOT NULL default '0000-00-00 00:00:00',
activated datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '0',
activation_key varchar(50) NOT NULL default '',
meta longtext,
2013-08-30 04:30:08 +00:00
PRIMARY KEY (signup_id),
2011-10-06 00:21:24 +00:00
KEY activation_key (activation_key),
2013-09-12 20:16:11 +00:00
KEY user_email (user_email),
2013-08-30 04:30:08 +00:00
KEY user_login_email (user_login,user_email),
2015-02-06 04:51:22 +00:00
KEY domain_path (domain(140),path(51))
2007-02-02 00:04:35 +00:00
) $charset_collate ;" ;
2004-09-05 01:22:17 +00:00
2011-10-06 00:21:24 +00:00
switch ( $scope ) {
2017-11-30 23:11:00 +00:00
case 'blog' :
2011-10-06 00:21:24 +00:00
$queries = $blog_tables ;
break ;
2017-11-30 23:11:00 +00:00
case 'global' :
2011-10-06 00:21:24 +00:00
$queries = $global_tables ;
2017-11-30 23:11:00 +00:00
if ( $is_multisite ) {
2011-10-06 00:21:24 +00:00
$queries .= $ms_global_tables ;
2017-11-30 23:11:00 +00:00
}
2011-10-06 00:21:24 +00:00
break ;
2017-11-30 23:11:00 +00:00
case 'ms_global' :
2011-10-06 00:21:24 +00:00
$queries = $ms_global_tables ;
break ;
2017-11-30 23:11:00 +00:00
case 'all' :
2014-05-30 17:58:15 +00:00
default :
2011-10-06 00:21:24 +00:00
$queries = $global_tables . $blog_tables ;
2017-11-30 23:11:00 +00:00
if ( $is_multisite ) {
2011-10-06 00:21:24 +00:00
$queries .= $ms_global_tables ;
2017-11-30 23:11:00 +00:00
}
2011-10-06 00:21:24 +00:00
break ;
}
2017-11-30 23:11:00 +00:00
if ( isset ( $old_blog_id ) ) {
2011-10-06 00:21:24 +00:00
$wpdb -> set_blog_id ( $old_blog_id );
2017-11-30 23:11:00 +00:00
}
2011-10-06 00:21:24 +00:00
return $queries ;
}
// Populate for back compat.
$wp_queries = wp_get_db_schema ( 'all' );
2008-10-02 01:03:26 +00:00
/**
* Create WordPress options and set the default values.
*
2008-10-10 18:21:16 +00:00
* @since 1.5.0
2014-10-31 17:56:22 +00:00
*
* @global wpdb $wpdb WordPress database abstraction object.
2015-05-28 21:41:30 +00:00
* @global int $wp_db_version
* @global int $wp_current_db_version
2008-10-02 01:03:26 +00:00
*/
2004-09-05 01:22:17 +00:00
function populate_options () {
2013-11-13 03:23:10 +00:00
global $wpdb , $wp_db_version , $wp_current_db_version ;
2008-08-09 05:36:14 +00:00
2008-06-24 17:36:21 +00:00
$guessurl = wp_guess_url ();
2013-10-26 20:29:10 +00:00
/**
* Fires before creating WordPress options and populating their default values.
*
* @since 2.6.0
*/
do_action ( 'populate_options' );
2008-08-09 05:36:14 +00:00
2017-11-30 23:11:00 +00:00
if ( ini_get ( 'safe_mode' ) ) {
2009-12-15 17:53:51 +00:00
// Safe mode can break mkdir() so use a flat structure by default.
2009-03-10 22:41:33 +00:00
$uploads_use_yearmonth_folders = 0 ;
2006-01-14 22:09:51 +00:00
} else {
2009-03-10 22:41:33 +00:00
$uploads_use_yearmonth_folders = 1 ;
2006-01-14 22:09:51 +00:00
}
2006-11-19 07:56:05 +00:00
2015-11-25 21:45:25 +00:00
// If WP_DEFAULT_THEME doesn't exist, fall back to the latest core default theme.
$stylesheet = $template = WP_DEFAULT_THEME ;
2017-11-30 23:11:00 +00:00
$theme = wp_get_theme ( WP_DEFAULT_THEME );
2015-11-25 21:45:25 +00:00
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 ();
}
2011-11-10 21:06:57 +00:00
2012-01-29 20:04:11 +00:00
$timezone_string = '' ;
2017-11-30 23:11:00 +00:00
$gmt_offset = 0 ;
2017-11-26 23:57:55 +00:00
/*
* 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://secure.php.net/manual/en/timezones.php
* for all timezone strings supported by PHP.
*/
2012-01-29 23:43:14 +00:00
$offset_or_tz = _x ( '0' , 'default GMT offset or timezone string' );
2017-11-30 23:11:00 +00:00
if ( is_numeric ( $offset_or_tz ) ) {
2012-01-29 20:04:11 +00:00
$gmt_offset = $offset_or_tz ;
2017-11-30 23:11:00 +00:00
} elseif ( $offset_or_tz && in_array ( $offset_or_tz , timezone_identifiers_list () ) ) {
2012-01-29 20:04:11 +00:00
$timezone_string = $offset_or_tz ;
2017-11-30 23:11:00 +00:00
}
2012-01-29 20:04:11 +00:00
2009-03-10 22:41:33 +00:00
$options = array (
2017-11-30 23:11:00 +00:00
'siteurl' => $guessurl ,
'home' => $guessurl ,
'blogname' => __ ( 'My Site' ),
/* translators: site tagline */
'blogdescription' => __ ( 'Just another WordPress site' ),
'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://secure.php.net/date */
'date_format' => __ ( 'F j, Y' ),
/* translators: default time format, see https://secure.php.net/date */
'time_format' => __ ( 'g:i a' ),
/* translators: links last updated date format, see https://secure.php.net/date */
'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
'default_email_category' => 1 ,
'recently_edited' => '' ,
'template' => $template ,
'stylesheet' => $stylesheet ,
'comment_whitelist' => 1 ,
'blacklist_keys' => '' ,
'comment_registration' => 0 ,
'html_type' => 'text/html' ,
// 1.5.1
'use_trackback' => 0 ,
// 2.0
'default_role' => 'subscriber' ,
'db_version' => $wp_db_version ,
// 2.0.1
'uploads_use_yearmonth_folders' => $uploads_use_yearmonth_folders ,
'upload_path' => '' ,
// 2.1
'blog_public' => '1' ,
'default_link_category' => 2 ,
'show_on_front' => 'posts' ,
// 2.2
'tag_base' => '' ,
// 2.5
'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
'avatar_default' => 'mystery' ,
// 2.7
'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
'timezone_string' => $timezone_string ,
// 3.0
'page_for_posts' => 0 ,
'page_on_front' => 0 ,
// 3.1
'default_post_format' => 0 ,
// 3.5
'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 ,
2009-03-10 22:41:33 +00:00
);
2011-11-22 21:50:50 +00:00
// 3.3
if ( ! is_multisite () ) {
2011-11-22 22:05:42 +00:00
$options [ 'initial_db_version' ] = ! empty ( $wp_current_db_version ) && $wp_current_db_version < $wp_db_version
2011-11-22 21:50:50 +00:00
? $wp_current_db_version : $wp_db_version ;
}
2010-01-19 00:04:25 +00:00
// 3.0 multisite
if ( is_multisite () ) {
2016-01-28 03:35:27 +00:00
/* translators: site tagline */
2017-11-30 23:11:00 +00:00
$options [ 'blogdescription' ] = sprintf ( __ ( 'Just another %s site' ), get_network () -> site_name );
$options [ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/' ;
2010-01-19 00:04:25 +00:00
}
2009-03-11 01:07:12 +00:00
// Set autoload to no for these options
2012-03-02 20:13:35 +00:00
$fat_options = array ( 'moderation_keys' , 'recently_edited' , 'blacklist_keys' , 'uninstall_plugins' );
2009-03-11 01:07:12 +00:00
2017-11-30 23:11:00 +00:00
$keys = "'" . implode ( "', '" , array_keys ( $options ) ) . "'" ;
2013-07-09 19:14:33 +00:00
$existing_options = $wpdb -> get_col ( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" );
2009-03-10 22:41:33 +00:00
$insert = '' ;
foreach ( $options as $option => $value ) {
2017-11-30 23:11:00 +00:00
if ( in_array ( $option , $existing_options ) ) {
2009-03-10 22:41:33 +00:00
continue ;
2017-11-30 23:11:00 +00:00
}
if ( in_array ( $option , $fat_options ) ) {
2009-03-11 01:07:12 +00:00
$autoload = 'no' ;
2017-11-30 23:11:00 +00:00
} else {
2009-03-11 01:07:12 +00:00
$autoload = 'yes' ;
2017-11-30 23:11:00 +00:00
}
2009-03-11 01:07:12 +00:00
2017-11-30 23:11:00 +00:00
if ( is_array ( $value ) ) {
$value = serialize ( $value );
}
if ( ! empty ( $insert ) ) {
2009-03-18 02:43:45 +00:00
$insert .= ', ' ;
2017-11-30 23:11:00 +00:00
}
$insert .= $wpdb -> prepare ( '(%s, %s, %s)' , $option , $value , $autoload );
2009-03-10 22:41:33 +00:00
}
2017-11-30 23:11:00 +00:00
if ( ! empty ( $insert ) ) {
$wpdb -> query ( "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert );
}
2009-03-10 22:41:33 +00:00
2014-07-17 09:14:16 +00:00
// In case it is set, but blank, update "home".
2017-11-30 23:11:00 +00:00
if ( ! __get_option ( 'home' ) ) {
update_option ( 'home' , $guessurl );
}
2008-12-09 18:03:31 +00:00
2014-07-17 09:14:16 +00:00
// Delete unused options.
2012-09-11 00:08:58 +00:00
$unusedoptions = array (
2017-11-30 23:11:00 +00:00
'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' ,
2012-09-11 00:08:58 +00:00
);
2017-11-30 23:11:00 +00:00
foreach ( $unusedoptions as $option ) {
delete_option ( $option );
}
2010-01-15 22:11:12 +00:00
2014-07-17 09:14:16 +00:00
// Delete obsolete magpie stuff.
2017-11-30 23:11:00 +00:00
$wpdb -> query ( "DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'" );
2013-10-24 22:55:02 +00:00
2017-10-21 13:22:49 +00:00
// Clear expired transients
delete_expired_transients ( true );
2004-09-05 01:22:17 +00:00
}
2005-01-10 20:21:06 +00:00
2008-10-02 01:03:26 +00:00
/**
* Execute WordPress role creation for the various WordPress versions.
*
2008-10-10 18:21:16 +00:00
* @since 2.0.0
2008-10-02 01:03:26 +00:00
*/
2005-07-11 22:39:50 +00:00
function populate_roles () {
2006-02-11 09:56:02 +00:00
populate_roles_160 ();
populate_roles_210 ();
2007-04-24 23:27:20 +00:00
populate_roles_230 ();
2008-02-02 07:57:51 +00:00
populate_roles_250 ();
2008-06-06 19:21:35 +00:00
populate_roles_260 ();
2008-08-04 21:01:09 +00:00
populate_roles_270 ();
2009-02-11 23:10:11 +00:00
populate_roles_280 ();
2010-01-18 22:21:36 +00:00
populate_roles_300 ();
2005-10-27 22:04:12 +00:00
}
2008-10-02 01:03:26 +00:00
/**
* Create the roles for WordPress 2.0
*
* @since 2.0.0
*/
2005-10-27 22:04:12 +00:00
function populate_roles_160 () {
2005-09-20 23:48:28 +00:00
// Add roles
2008-02-19 20:28:54 +00:00
// Dummy gettext calls to get strings in the catalog.
2009-03-10 23:02:29 +00:00
/* translators: user role */
2017-11-30 23:11:00 +00:00
_x ( 'Administrator' , 'User role' );
2009-03-10 23:02:29 +00:00
/* translators: user role */
2017-11-30 23:11:00 +00:00
_x ( 'Editor' , 'User role' );
2009-03-10 23:02:29 +00:00
/* translators: user role */
2017-11-30 23:11:00 +00:00
_x ( 'Author' , 'User role' );
2009-03-10 23:02:29 +00:00
/* translators: user role */
2017-11-30 23:11:00 +00:00
_x ( 'Contributor' , 'User role' );
2009-03-10 23:02:29 +00:00
/* translators: user role */
2017-11-30 23:11:00 +00:00
_x ( 'Subscriber' , 'User role' );
2008-02-19 20:28:54 +00:00
2017-11-30 23:11:00 +00:00
add_role ( 'administrator' , 'Administrator' );
add_role ( 'editor' , 'Editor' );
add_role ( 'author' , 'Author' );
add_role ( 'contributor' , 'Contributor' );
add_role ( 'subscriber' , 'Subscriber' );
2006-02-12 07:53:23 +00:00
2005-09-20 23:48:28 +00:00
// Add caps for Administrator role
2017-11-30 23:11:00 +00:00
$role = get_role ( 'administrator' );
$role -> add_cap ( 'switch_themes' );
$role -> add_cap ( 'edit_themes' );
$role -> add_cap ( 'activate_plugins' );
$role -> add_cap ( 'edit_plugins' );
$role -> add_cap ( 'edit_users' );
$role -> add_cap ( 'edit_files' );
$role -> add_cap ( 'manage_options' );
$role -> add_cap ( 'moderate_comments' );
$role -> add_cap ( 'manage_categories' );
$role -> add_cap ( 'manage_links' );
$role -> add_cap ( 'upload_files' );
$role -> add_cap ( 'import' );
$role -> add_cap ( 'unfiltered_html' );
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'edit_others_posts' );
$role -> add_cap ( 'edit_published_posts' );
$role -> add_cap ( 'publish_posts' );
$role -> add_cap ( 'edit_pages' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_10' );
$role -> add_cap ( 'level_9' );
$role -> add_cap ( 'level_8' );
$role -> add_cap ( 'level_7' );
$role -> add_cap ( 'level_6' );
$role -> add_cap ( 'level_5' );
$role -> add_cap ( 'level_4' );
$role -> add_cap ( 'level_3' );
$role -> add_cap ( 'level_2' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 07:53:23 +00:00
2005-09-20 23:48:28 +00:00
// Add caps for Editor role
2017-11-30 23:11:00 +00:00
$role = get_role ( 'editor' );
$role -> add_cap ( 'moderate_comments' );
$role -> add_cap ( 'manage_categories' );
$role -> add_cap ( 'manage_links' );
$role -> add_cap ( 'upload_files' );
$role -> add_cap ( 'unfiltered_html' );
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'edit_others_posts' );
$role -> add_cap ( 'edit_published_posts' );
$role -> add_cap ( 'publish_posts' );
$role -> add_cap ( 'edit_pages' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_7' );
$role -> add_cap ( 'level_6' );
$role -> add_cap ( 'level_5' );
$role -> add_cap ( 'level_4' );
$role -> add_cap ( 'level_3' );
$role -> add_cap ( 'level_2' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 07:53:23 +00:00
2005-09-20 23:48:28 +00:00
// Add caps for Author role
2017-11-30 23:11:00 +00:00
$role = get_role ( 'author' );
$role -> add_cap ( 'upload_files' );
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'edit_published_posts' );
$role -> add_cap ( 'publish_posts' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_2' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 07:53:23 +00:00
2005-09-20 23:48:28 +00:00
// Add caps for Contributor role
2017-11-30 23:11:00 +00:00
$role = get_role ( 'contributor' );
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 07:53:23 +00:00
2005-09-20 23:48:28 +00:00
// Add caps for Subscriber role
2017-11-30 23:11:00 +00:00
$role = get_role ( 'subscriber' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_0' );
2005-07-11 22:39:50 +00:00
}
2005-09-20 23:48:28 +00:00
2008-10-02 01:03:26 +00:00
/**
* Create and modify WordPress roles for WordPress 2.1.
*
* @since 2.1.0
*/
2006-02-11 09:56:02 +00:00
function populate_roles_210 () {
2017-11-30 23:11:00 +00:00
$roles = array ( 'administrator' , 'editor' );
foreach ( $roles as $role ) {
$role = get_role ( $role );
if ( empty ( $role ) ) {
2006-02-11 09:56:02 +00:00
continue ;
2017-11-30 23:11:00 +00:00
}
2006-02-11 09:56:02 +00:00
2017-11-30 23:11:00 +00:00
$role -> add_cap ( 'edit_others_pages' );
$role -> add_cap ( 'edit_published_pages' );
$role -> add_cap ( 'publish_pages' );
$role -> add_cap ( 'delete_pages' );
$role -> add_cap ( 'delete_others_pages' );
$role -> add_cap ( 'delete_published_pages' );
$role -> add_cap ( 'delete_posts' );
$role -> add_cap ( 'delete_others_posts' );
$role -> add_cap ( 'delete_published_posts' );
$role -> add_cap ( 'delete_private_posts' );
$role -> add_cap ( 'edit_private_posts' );
$role -> add_cap ( 'read_private_posts' );
$role -> add_cap ( 'delete_private_pages' );
$role -> add_cap ( 'edit_private_pages' );
$role -> add_cap ( 'read_private_pages' );
2006-02-11 09:56:02 +00:00
}
2006-02-12 07:53:23 +00:00
2017-11-30 23:11:00 +00:00
$role = get_role ( 'administrator' );
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'delete_users' );
$role -> add_cap ( 'create_users' );
2006-06-05 16:52:21 +00:00
}
2017-11-30 23:11:00 +00:00
$role = get_role ( 'author' );
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'delete_posts' );
$role -> add_cap ( 'delete_published_posts' );
2006-02-11 09:56:02 +00:00
}
2017-11-30 23:11:00 +00:00
$role = get_role ( 'contributor' );
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'delete_posts' );
2006-02-11 09:56:02 +00:00
}
}
2008-10-02 01:03:26 +00:00
/**
* Create and modify WordPress roles for WordPress 2.3.
*
* @since 2.3.0
*/
2007-04-24 23:27:20 +00:00
function populate_roles_230 () {
2013-05-28 17:06:39 +00:00
$role = get_role ( 'administrator' );
2007-06-14 02:25:30 +00:00
2017-11-30 23:11:00 +00:00
if ( ! empty ( $role ) ) {
2007-04-24 23:27:20 +00:00
$role -> add_cap ( 'unfiltered_upload' );
}
}
2008-10-02 01:03:26 +00:00
/**
* Create and modify WordPress roles for WordPress 2.5.
*
* @since 2.5.0
*/
2008-02-02 07:57:51 +00:00
function populate_roles_250 () {
2013-05-28 17:06:39 +00:00
$role = get_role ( 'administrator' );
2008-02-02 07:57:51 +00:00
2017-11-30 23:11:00 +00:00
if ( ! empty ( $role ) ) {
2008-02-02 07:57:51 +00:00
$role -> add_cap ( 'edit_dashboard' );
}
}
2008-10-02 01:03:26 +00:00
/**
* Create and modify WordPress roles for WordPress 2.6.
*
* @since 2.6.0
*/
2008-06-06 19:21:35 +00:00
function populate_roles_260 () {
2013-05-28 17:06:39 +00:00
$role = get_role ( 'administrator' );
2008-06-06 19:21:35 +00:00
2017-11-30 23:11:00 +00:00
if ( ! empty ( $role ) ) {
2008-06-06 19:21:35 +00:00
$role -> add_cap ( 'update_plugins' );
$role -> add_cap ( 'delete_plugins' );
}
}
2008-10-02 01:03:26 +00:00
/**
* Create and modify WordPress roles for WordPress 2.7.
*
* @since 2.7.0
*/
2008-08-04 21:01:09 +00:00
function populate_roles_270 () {
2013-05-28 17:06:39 +00:00
$role = get_role ( 'administrator' );
2008-08-04 21:01:09 +00:00
2017-11-30 23:11:00 +00:00
if ( ! empty ( $role ) ) {
2008-08-04 21:01:09 +00:00
$role -> add_cap ( 'install_plugins' );
2008-09-26 06:43:53 +00:00
$role -> add_cap ( 'update_themes' );
2008-08-04 21:01:09 +00:00
}
}
2009-02-11 23:10:11 +00:00
/**
* Create and modify WordPress roles for WordPress 2.8.
*
* @since 2.8.0
*/
function populate_roles_280 () {
2013-05-28 17:06:39 +00:00
$role = get_role ( 'administrator' );
2009-02-11 23:10:11 +00:00
2017-11-30 23:11:00 +00:00
if ( ! empty ( $role ) ) {
2009-02-11 23:10:11 +00:00
$role -> add_cap ( 'install_themes' );
}
}
2010-01-18 22:21:36 +00:00
/**
2010-01-18 22:34:16 +00:00
* Create and modify WordPress roles for WordPress 3.0.
2010-01-18 22:21:36 +00:00
*
2010-03-26 19:13:36 +00:00
* @since 3.0.0
2010-01-18 22:21:36 +00:00
*/
function populate_roles_300 () {
2013-05-28 17:06:39 +00:00
$role = get_role ( 'administrator' );
2010-01-18 22:21:36 +00:00
2017-11-30 23:11:00 +00:00
if ( ! empty ( $role ) ) {
2010-01-18 22:21:36 +00:00
$role -> add_cap ( 'update_core' );
2010-04-22 19:48:13 +00:00
$role -> add_cap ( 'list_users' );
2010-01-18 22:21:36 +00:00
$role -> add_cap ( 'remove_users' );
2010-04-21 17:43:53 +00:00
$role -> add_cap ( 'promote_users' );
2010-04-16 15:36:44 +00:00
$role -> add_cap ( 'edit_theme_options' );
2010-05-27 09:49:38 +00:00
$role -> add_cap ( 'delete_themes' );
2010-06-01 18:02:05 +00:00
$role -> add_cap ( 'export' );
2010-01-18 22:21:36 +00:00
}
}
2017-11-30 23:11:00 +00:00
if ( ! function_exists ( 'install_network' ) ) :
/**
* Install Network.
*
* @since 3.0.0
*/
function install_network () {
if ( ! defined ( 'WP_INSTALLING_NETWORK' ) ) {
define ( 'WP_INSTALLING_NETWORK' , true );
}
2011-10-06 00:21:24 +00:00
2017-11-30 23:11:00 +00:00
dbDelta ( wp_get_db_schema ( 'global' ) );
}
2011-10-06 00:21:24 +00:00
endif ;
2010-01-19 00:04:25 +00:00
/**
2013-10-26 20:29:10 +00:00
* Populate network settings.
2010-01-19 00:04:25 +00:00
*
2010-03-26 19:13:36 +00:00
* @since 3.0.0
2010-01-19 00:04:25 +00:00
*
2015-05-29 02:06:31 +00:00
* @global wpdb $wpdb
* @global object $current_site
* @global int $wp_db_version
* @global WP_Rewrite $wp_rewrite
*
2016-01-10 01:26:25 +00:00
* @param int $network_id ID of network to populate.
* @param string $domain The domain name for the network (eg. "example.com").
* @param string $email Email address for the network administrator.
* @param string $site_name The name of the network.
* @param string $path Optional. The path to append to the network's domain name. Default '/'.
2017-08-22 11:52:48 +00:00
* @param bool $subdomain_install Optional. Whether the network is a subdomain installation or a subdirectory installation.
* Default false, meaning the network is a subdirectory installation.
* @return bool|WP_Error True on success, or WP_Error on warning (with the installation otherwise successful,
2013-10-26 20:29:10 +00:00
* so the error code must be checked) or failure.
2010-01-19 00:04:25 +00:00
*/
2010-03-10 08:17:07 +00:00
function populate_network ( $network_id = 1 , $domain = '' , $email = '' , $site_name = '' , $path = '/' , $subdomain_install = false ) {
2012-03-05 17:39:26 +00:00
global $wpdb , $current_site , $wp_db_version , $wp_rewrite ;
2010-01-19 00:04:25 +00:00
2010-03-11 01:51:24 +00:00
$errors = new WP_Error ();
2017-11-30 23:11:00 +00:00
if ( '' == $domain ) {
2010-03-11 01:51:24 +00:00
$errors -> add ( 'empty_domain' , __ ( 'You must provide a domain name.' ) );
2017-11-30 23:11:00 +00:00
}
if ( '' == $site_name ) {
2010-03-11 01:51:24 +00:00
$errors -> add ( 'empty_sitename' , __ ( 'You must provide a name for your network of sites.' ) );
2017-11-30 23:11:00 +00:00
}
2010-01-19 00:04:25 +00:00
2014-07-17 09:14:16 +00:00
// Check for network collision.
2017-09-08 16:33:43 +00:00
$network_exists = false ;
if ( is_multisite () ) {
if ( get_network ( ( int ) $network_id ) ) {
$errors -> add ( 'siteid_exists' , __ ( 'The network already exists.' ) );
}
} else {
if ( $network_id == $wpdb -> get_var ( $wpdb -> prepare ( "SELECT id FROM $wpdb->site WHERE id = %d" , $network_id ) ) ) {
$errors -> add ( 'siteid_exists' , __ ( 'The network already exists.' ) );
}
}
2010-01-19 00:04:25 +00:00
2017-11-30 23:11:00 +00:00
if ( ! is_email ( $email ) ) {
2015-08-28 03:17:21 +00:00
$errors -> add ( 'invalid_email' , __ ( 'You must provide a valid email address.' ) );
2017-11-30 23:11:00 +00:00
}
2010-03-11 01:51:24 +00:00
2018-02-27 02:31:31 +00:00
if ( $errors -> has_errors () ) {
2010-03-11 01:51:24 +00:00
return $errors ;
2017-11-30 23:11:00 +00:00
}
2010-03-11 01:51:24 +00:00
2015-11-08 03:16:26 +00:00
// If a user with the provided email does not exist, default to the current user as the new network admin.
$site_user = get_user_by ( 'email' , $email );
if ( false === $site_user ) {
$site_user = wp_get_current_user ();
}
2014-07-17 09:14:16 +00:00
// Set up site tables.
2017-11-30 23:11:00 +00:00
$template = get_option ( 'template' );
$stylesheet = get_option ( 'stylesheet' );
2010-02-12 22:45:35 +00:00
$allowed_themes = array ( $stylesheet => true );
2015-11-25 21:45:25 +00:00
if ( $template != $stylesheet ) {
2010-02-12 22:45:35 +00:00
$allowed_themes [ $template ] = true ;
2015-11-25 21:45:25 +00:00
}
if ( WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template ) {
2010-05-06 19:53:40 +00:00
$allowed_themes [ WP_DEFAULT_THEME ] = true ;
2015-11-25 21:45:25 +00:00
}
// If WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme.
if ( ! wp_get_theme ( WP_DEFAULT_THEME ) -> exists () ) {
if ( $core_default = WP_Theme :: get_core_default_theme () ) {
$allowed_themes [ $core_default -> get_stylesheet () ] = true ;
}
}
2010-01-19 16:14:06 +00:00
2010-01-27 19:13:00 +00:00
if ( 1 == $network_id ) {
2017-11-30 23:11:00 +00:00
$wpdb -> insert (
$wpdb -> site , array (
'domain' => $domain ,
'path' => $path ,
)
);
2010-01-27 19:13:00 +00:00
$network_id = $wpdb -> insert_id ;
} else {
2017-11-30 23:11:00 +00:00
$wpdb -> insert (
$wpdb -> site , array (
'domain' => $domain ,
'path' => $path ,
'id' => $network_id ,
)
);
2010-01-19 00:04:25 +00:00
}
2010-01-27 19:13:00 +00:00
2014-03-02 22:25:14 +00:00
wp_cache_delete ( 'networks_have_paths' , 'site-options' );
2017-11-30 23:11:00 +00:00
if ( ! is_multisite () ) {
2010-01-19 00:04:25 +00:00
$site_admins = array ( $site_user -> user_login );
2017-11-30 23:11:00 +00:00
$users = get_users (
array (
'fields' => array ( 'user_login' ),
'role' => 'administrator' ,
)
);
2010-01-19 00:04:25 +00:00
if ( $users ) {
foreach ( $users as $user ) {
2017-04-10 22:00:43 +00:00
$site_admins [] = $user -> user_login ;
2010-01-19 00:04:25 +00:00
}
2017-04-10 22:00:43 +00:00
$site_admins = array_unique ( $site_admins );
2010-01-19 00:04:25 +00:00
}
} else {
2015-10-07 17:11:25 +00:00
$site_admins = get_site_option ( 'site_admins' );
2010-01-19 00:04:25 +00:00
}
2010-01-27 19:13:00 +00:00
2015-05-06 09:12:25 +00:00
/* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
2017-11-30 23:11:00 +00:00
$welcome_email = __ (
'Howdy USERNAME,
2010-01-19 00:04:25 +00:00
2010-05-01 07:09:38 +00:00
Your new SITE_NAME site has been successfully set up at:
2010-01-19 00:04:25 +00:00
BLOG_URL
You can log in to the administrator account with the following information:
2014-10-02 01:28:16 +00:00
2010-01-19 00:04:25 +00:00
Username: USERNAME
Password: PASSWORD
2014-12-05 01:15:26 +00:00
Log in here: BLOG_URLwp-login.php
2010-01-19 00:04:25 +00:00
2011-10-04 16:09:24 +00:00
We hope you enjoy your new site. Thanks!
2010-01-19 00:04:25 +00:00
2017-11-30 23:11:00 +00:00
--The Team @ SITE_NAME'
);
2010-01-27 19:13:00 +00:00
2014-06-25 18:00:15 +00:00
$misc_exts = array (
2014-07-17 09:14:16 +00:00
// Images.
2017-11-30 23:11:00 +00:00
'jpg' ,
'jpeg' ,
'png' ,
'gif' ,
2014-07-17 09:14:16 +00:00
// Video.
2017-11-30 23:11:00 +00:00
'mov' ,
'avi' ,
'mpg' ,
'3gp' ,
'3g2' ,
2014-07-17 09:14:16 +00:00
// "audio".
2017-11-30 23:11:00 +00:00
'midi' ,
'mid' ,
2014-07-17 09:14:16 +00:00
// Miscellaneous.
2017-11-30 23:11:00 +00:00
'pdf' ,
'doc' ,
'ppt' ,
'odt' ,
'pptx' ,
'docx' ,
'pps' ,
'ppsx' ,
'xls' ,
'xlsx' ,
'key' ,
2014-06-25 18:00:15 +00:00
);
2017-11-30 23:11:00 +00:00
$audio_exts = wp_get_audio_extensions ();
$video_exts = wp_get_video_extensions ();
2014-06-25 18:00:15 +00:00
$upload_filetypes = array_unique ( array_merge ( $misc_exts , $audio_exts , $video_exts ) );
2010-01-27 19:13:00 +00:00
$sitemeta = array (
2017-11-30 23:11:00 +00:00
'site_name' => $site_name ,
'admin_email' => $email ,
'admin_user_id' => $site_user -> ID ,
'registration' => 'none' ,
'upload_filetypes' => implode ( ' ' , $upload_filetypes ),
'blog_upload_space' => 100 ,
'fileupload_maxk' => 1500 ,
'site_admins' => $site_admins ,
'allowedthemes' => $allowed_themes ,
'illegal_names' => array ( 'www' , 'web' , 'root' , 'admin' , 'main' , 'invite' , 'administrator' , 'files' ),
'wpmu_upgrade_site' => $wp_db_version ,
'welcome_email' => $welcome_email ,
2015-11-11 20:55:26 +00:00
/* translators: %s: site link */
2017-11-30 23:11:00 +00:00
'first_post' => __ ( 'Welcome to %s. This is your first post. Edit or delete it, then start blogging!' ),
2010-01-27 19:13:00 +00:00
// @todo - network admins should have a method of editing the network siteurl (used for cookie hash)
2017-11-30 23:11:00 +00:00
'siteurl' => get_option ( 'siteurl' ) . '/' ,
'add_new_users' => '0' ,
2015-10-07 17:11:25 +00:00
'upload_space_check_disabled' => is_multisite () ? get_site_option ( 'upload_space_check_disabled' ) : '1' ,
2017-11-30 23:11:00 +00:00
'subdomain_install' => intval ( $subdomain_install ),
'global_terms_enabled' => global_terms_enabled () ? '1' : '0' ,
'ms_files_rewriting' => is_multisite () ? get_site_option ( 'ms_files_rewriting' ) : '0' ,
'initial_db_version' => get_option ( 'initial_db_version' ),
'active_sitewide_plugins' => array (),
'WPLANG' => get_locale (),
2010-01-27 19:13:00 +00:00
);
2017-11-30 23:11:00 +00:00
if ( ! $subdomain_install ) {
2010-05-08 18:37:38 +00:00
$sitemeta [ 'illegal_names' ][] = 'blog' ;
2017-11-30 23:11:00 +00:00
}
2010-01-27 19:13:00 +00:00
2013-09-12 20:49:09 +00:00
/**
2016-05-22 18:01:30 +00:00
* Filters meta for a network on creation.
2013-09-12 20:49:09 +00:00
*
* @since 3.7.0
*
2013-10-26 20:29:10 +00:00
* @param array $sitemeta Associative array of network meta keys and values to be inserted.
* @param int $network_id ID of network to populate.
2013-09-12 20:49:09 +00:00
*/
$sitemeta = apply_filters ( 'populate_network_meta' , $sitemeta , $network_id );
2010-01-27 19:13:00 +00:00
$insert = '' ;
foreach ( $sitemeta as $meta_key => $meta_value ) {
2017-11-30 23:11:00 +00:00
if ( is_array ( $meta_value ) ) {
2010-01-27 19:13:00 +00:00
$meta_value = serialize ( $meta_value );
2017-11-30 23:11:00 +00:00
}
if ( ! empty ( $insert ) ) {
2010-01-27 19:13:00 +00:00
$insert .= ', ' ;
2017-11-30 23:11:00 +00:00
}
$insert .= $wpdb -> prepare ( '( %d, %s, %s)' , $network_id , $meta_key , $meta_value );
2010-01-27 19:13:00 +00:00
}
$wpdb -> query ( "INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert );
2010-01-19 00:04:25 +00:00
2014-07-17 09:14:16 +00:00
/*
* When upgrading from single to multisite, assume the current site will
* become the main site of the network. When using populate_network()
* to create another network in an existing multisite environment, skip
* these steps since the main site of the new network has not yet been
* created.
*/
2012-10-15 21:41:29 +00:00
if ( ! is_multisite () ) {
2017-11-30 23:11:00 +00:00
$current_site = new stdClass ;
$current_site -> domain = $domain ;
$current_site -> path = $path ;
2012-10-15 21:41:29 +00:00
$current_site -> site_name = ucfirst ( $domain );
2017-11-30 23:11:00 +00:00
$wpdb -> insert (
$wpdb -> blogs , array (
'site_id' => $network_id ,
'blog_id' => 1 ,
'domain' => $domain ,
'path' => $path ,
'registered' => current_time ( 'mysql' ),
)
);
2012-10-15 21:41:29 +00:00
$current_site -> blog_id = $blog_id = $wpdb -> insert_id ;
2010-02-22 21:25:32 +00:00
update_user_meta ( $site_user -> ID , 'source_domain' , $domain );
update_user_meta ( $site_user -> ID , 'primary_blog' , $blog_id );
2010-01-19 00:04:25 +00:00
2017-11-30 23:11:00 +00:00
if ( $subdomain_install ) {
2012-10-15 21:41:29 +00:00
$wp_rewrite -> set_permalink_structure ( '/%year%/%monthnum%/%day%/%postname%/' );
2017-11-30 23:11:00 +00:00
} else {
2012-10-15 21:41:29 +00:00
$wp_rewrite -> set_permalink_structure ( '/blog/%year%/%monthnum%/%day%/%postname%/' );
2017-11-30 23:11:00 +00:00
}
2010-01-19 16:14:06 +00:00
2012-10-15 21:41:29 +00:00
flush_rewrite_rules ();
2010-01-19 00:04:25 +00:00
2017-11-30 23:11:00 +00:00
if ( ! $subdomain_install ) {
2013-08-29 19:31:09 +00:00
return true ;
2017-11-30 23:11:00 +00:00
}
2013-08-29 19:31:09 +00:00
2010-01-19 00:04:25 +00:00
$vhost_ok = false ;
2017-11-30 23:11:00 +00:00
$errstr = '' ;
2010-01-19 00:04:25 +00:00
$hostname = substr ( md5 ( time () ), 0 , 6 ) . '.' . $domain ; // Very random hostname!
2017-11-30 23:11:00 +00:00
$page = wp_remote_get (
'http://' . $hostname , array (
'timeout' => 5 ,
'httpversion' => '1.1' ,
)
);
if ( is_wp_error ( $page ) ) {
2010-03-11 01:51:24 +00:00
$errstr = $page -> get_error_message ();
2017-11-30 23:11:00 +00:00
} elseif ( 200 == wp_remote_retrieve_response_code ( $page ) ) {
2010-01-19 00:04:25 +00:00
$vhost_ok = true ;
2017-11-30 23:11:00 +00:00
}
2010-03-11 01:51:24 +00:00
2010-03-10 08:17:07 +00:00
if ( ! $vhost_ok ) {
2010-03-11 01:51:24 +00:00
$msg = '<p><strong>' . __ ( 'Warning! Wildcard DNS may not be configured correctly!' ) . '</strong></p>' ;
2015-09-18 18:39:23 +00:00
2015-09-18 18:21:25 +00:00
$msg .= '<p>' . sprintf (
2015-09-18 18:39:23 +00:00
/* translators: %s: host name */
2015-09-18 18:21:25 +00:00
__ ( 'The installer attempted to contact a random hostname (%s) on your domain.' ),
'<code>' . $hostname . '</code>'
);
2017-11-30 23:11:00 +00:00
if ( ! empty ( $errstr ) ) {
2015-09-18 18:39:23 +00:00
/* translators: %s: error message */
2010-04-28 07:40:49 +00:00
$msg .= ' ' . sprintf ( __ ( 'This resulted in an error message: %s' ), '<code>' . $errstr . '</code>' );
2015-09-18 18:39:23 +00:00
}
2010-03-11 01:51:24 +00:00
$msg .= '</p>' ;
2015-09-18 18:39:23 +00:00
2015-09-18 18:21:25 +00:00
$msg .= '<p>' . sprintf (
2015-09-18 18:39:23 +00:00
/* translators: %s: asterisk symbol (*) */
2015-09-18 18:21:25 +00:00
__ ( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a %s hostname record pointing at your web server in your DNS configuration tool.' ),
'<code>*</code>'
) . '</p>' ;
2015-09-18 18:39:23 +00:00
2010-03-11 01:51:24 +00:00
$msg .= '<p>' . __ ( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '</p>' ;
2015-09-18 18:39:23 +00:00
2010-03-11 01:51:24 +00:00
return new WP_Error ( 'no_wildcard_dns' , $msg );
2010-01-19 00:04:25 +00:00
}
}
2010-03-11 01:51:24 +00:00
return true ;
2010-01-19 00:04:25 +00:00
}