WordPress.org

Make WordPress Core

Ticket #34450: 34450.diff

File 34450.diff, 5.3 KB (added by flixos90, 4 years ago)
  • src/wp-includes/ms-blogs.php

     
    7676 *
    7777 * @since MU
    7878 *
    79  * @global wpdb $wpdb WordPress database abstraction object.
    80  *
    8179 * @param string $slug
    8280 * @return int A blog id
    8381 */
    8482function get_id_from_blogname( $slug ) {
    85         global $wpdb;
    86 
    8783        $current_site = get_current_site();
    8884        $slug = trim( $slug, '/' );
    8985
    90         $blog_id = wp_cache_get( 'get_id_from_blogname_' . $slug, 'blog-details' );
    91         if ( $blog_id )
    92                 return $blog_id;
    93 
    9486        if ( is_subdomain_install() ) {
    95                 $domain = $slug . '.' . $current_site->domain;
     87                $domain = $slug . '.' . preg_replace( '|^www\.|', '', $current_site->domain );
    9688                $path = $current_site->path;
    9789        } else {
    9890                $domain = $current_site->domain;
    9991                $path = $current_site->path . $slug . '/';
    10092        }
    10193
    102         $blog_id = $wpdb->get_var( $wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE domain = %s AND path = %s", $domain, $path) );
    103         wp_cache_set( 'get_id_from_blogname_' . $slug, $blog_id, 'blog-details' );
    104         return $blog_id;
     94        $site_ids = get_sites( array(
     95                'number' => 1,
     96                'fields' => 'ids',
     97                'domain' => $domain,
     98                'path'   => $path,
     99        ) );
     100
     101        return array_shift( $site_ids );
    105102}
    106103
    107104/**
     
    453450        wp_cache_delete(  $domain_path_key, 'blog-lookup' );
    454451        wp_cache_delete( 'current_blog_' . $blog->domain, 'site-options' );
    455452        wp_cache_delete( 'current_blog_' . $blog->domain . $blog->path, 'site-options' );
    456         wp_cache_delete( 'get_id_from_blogname_' . trim( $blog->path, '/' ), 'blog-details' );
    457453        wp_cache_delete( $domain_path_key, 'blog-id-cache' );
    458454
    459455        /**
  • tests/phpunit/tests/multisite/getIdFromBlogname.php

     
     1<?php
     2
     3if ( is_multisite() ) :
     4/**
     5 * Test get_id_from_blogname() in multisite.
     6 *
     7 * @group ms-site
     8 * @group multisite
     9 */
     10class Tests_Multisite_Get_Id_From_Blogname extends WP_UnitTestCase {
     11        protected static $network_ids;
     12        protected static $site_ids;
     13
     14        public static function wpSetUpBeforeClass( $factory ) {
     15                self::$network_ids = array(
     16                        'wordpress.org/'         => array( 'domain' => 'wordpress.org',     'path' => '/' ),
     17                        'www.wordpress.net/'     => array( 'domain' => 'www.wordpress.net', 'path' => '/' ),
     18                );
     19
     20                foreach ( self::$network_ids as &$id ) {
     21                        $id = $factory->network->create( $id );
     22                }
     23                unset( $id );
     24
     25                self::$site_ids = array(
     26                        'wordpress.org/'              => array( 'domain' => 'wordpress.org',     'path' => '/',     'site_id' => self::$network_ids['wordpress.org/'] ),
     27                        'foo.wordpress.org/'          => array( 'domain' => 'foo.wordpress.org', 'path' => '/',     'site_id' => self::$network_ids['wordpress.org/'] ),
     28                        'wordpress.org/foo/'          => array( 'domain' => 'wordpress.org',     'path' => '/foo/', 'site_id' => self::$network_ids['wordpress.org/'] ),
     29                        'www.wordpress.net/'          => array( 'domain' => 'www.wordpress.net', 'path' => '/',     'site_id' => self::$network_ids['www.wordpress.net/'] ),
     30                        'foo.wordpress.net/'          => array( 'domain' => 'foo.wordpress.net', 'path' => '/',     'site_id' => self::$network_ids['www.wordpress.net/'] ),
     31                        'www.wordpress.net/foo/'      => array( 'domain' => 'www.wordpress.net', 'path' => '/foo/', 'site_id' => self::$network_ids['www.wordpress.net/'] ),
     32                );
     33
     34                foreach ( self::$site_ids as &$id ) {
     35                        $id = $factory->blog->create( $id );
     36                }
     37                unset( $id );
     38        }
     39
     40        public static function wpTearDownAfterClass() {
     41                global $wpdb;
     42
     43                foreach( self::$site_ids as $id ) {
     44                        wpmu_delete_blog( $id, true );
     45                }
     46
     47                foreach( self::$network_ids as $id ) {
     48                        $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d", $id ) );
     49                        $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->site} WHERE id= %d", $id ) );
     50                }
     51
     52                wp_update_network_site_counts();
     53        }
     54
     55        /**
     56         * @ticket 34450
     57         */
     58        public function test_get_id_from_blogname_no_www() {
     59                global $current_site;
     60
     61                $original_network = $current_site;
     62                $current_site = get_network( self::$network_ids['wordpress.org/'] );
     63
     64                if ( is_subdomain_install() ) {
     65                        $expected = self::$site_ids['foo.wordpress.org/'];
     66                } else {
     67                        $expected = self::$site_ids['wordpress.org/foo/'];
     68                }
     69
     70                $result = get_id_from_blogname( 'foo' );
     71                $this->assertEquals( $expected, $result );
     72
     73                $current_site = $original_network;
     74        }
     75
     76        /**
     77         * @ticket 34450
     78         */
     79        public function test_get_id_from_blogname_www() {
     80                global $current_site;
     81
     82                $original_network = $current_site;
     83                $current_site = get_network( self::$network_ids['www.wordpress.net/'] );
     84
     85                if ( is_subdomain_install() ) {
     86                        $expected = self::$site_ids['foo.wordpress.net/'];
     87                } else {
     88                        $expected = self::$site_ids['www.wordpress.net/foo/'];
     89                }
     90
     91                $result = get_id_from_blogname( 'foo' );
     92                $this->assertEquals( $expected, $result );
     93
     94                $current_site = $original_network;
     95        }
     96
     97}
     98
     99endif;