Make WordPress Core

Opened 8 years ago

Closed 7 years ago

#11159 closed defect (bug) (invalid)

WP_SITEURL and bloginfo('siteurl') inconsistent, or WP_SITEURL should be defined

Reported by: anmari Owned by:
Milestone: Priority: normal
Severity: minor Version:
Component: General Keywords: needs-patch WP_SITEURL constants
Focuses: Cc:


The wordpress directory constant WP_SITEURL remains undefined if not defined in wp-config.php , although other constants referred to in http://codex.wordpress.org/Editing_wp-config.php do get defined in wp-settings.php. See from around line 109 and lines 228, 362, 370 etc onwards.

get_bloginfo('siteurl') defaults to get_bloginfo('home'). If a developer uses get_bloginfo('siteurl') and the wp install has wp_siteurl defined in the config file - the "wrong" url is returned from what the developer expects.

So while a developer can use other constants, they cannot reliably use WP_SITEURL. They must check for definition of WP_SITEURL and define WP_SITEURL themselves using 'wp_url', not 'siteurl', as that gives same as 'home', or always use bloginfo('wp-url') - slower.

See: general-template.php (in 2.9) lines 303 on has:

case 'url' :
case 'home' : DEPRECATED
case 'siteurl' :

$output = get_option('home');

case 'wpurl' :

$output = get_option('siteurl');

1) bloginfo('siteurl') even if deprecated, should call option('siteurl'), as per bloginfo('wp_url'), not 'home'
2) WP_SITEURL (or WP_WPURL!!) should be defined in wp-settings if not defined in config

Change History (3)

#1 @scribu
8 years ago

  • Keywords needs-patch added
  • Milestone changed from Unassigned to Future Release

#2 @anmari
7 years ago

In wp 3.0.1 looks like default_constants.php should have :

if ( !defined('WP_SITEURL') )

define( 'WP_SITEURL', get_option('siteurl') );

either around line 40 or around line 71
to be consistent

#3 @nacin
7 years ago

  • Milestone Future Release deleted
  • Resolution set to invalid
  • Status changed from new to closed

WP_SITEURL and WP_HOME are short-circuit constants. By default they should not be defined, there's no reason to define them. They should NOT be used directly.

When defined, these trigger a filter on pre_option_home and pre_option_siteurl, to then force get_option() to return the constant's value.

Note: See TracTickets for help on using tickets.