Make WordPress Core

Ticket #40180: 40180.2.diff

File 40180.2.diff, 3.5 KB (added by flixos90, 7 years ago)
  • src/wp-includes/ms-blogs.php

     
    538538}
    539539
    540540/**
     541 * Retrieves a site by given site data.
     542 *
     543 * @since 4.8.0
     544 *
     545 * @param int|string|array $field Name of a single field or an array of multiple fields to query against.
     546 *                                The supported fields are 'id', 'slug', 'domain', 'path' and 'network_id'.
     547 * @param mixed            $value Optional. If $field is the name of a field, this parameter must be
     548 *                                provided for that field's value to query for. Otherwise it can be omitted.
     549 *                                Default null.
     550 * @return WP_Site|null The site object or null if not found.
     551 */
     552function get_site_by( $field, $value = null ) {
     553        // If only an ID is provided, take a shortcut.
     554        if ( 'id' === $field ) {
     555                return get_site( $value );
     556        }
     557
     558        $args = $field;
     559        if ( ! is_array( $args ) ) {
     560                $args = array( $field => $value );
     561        }
     562
     563        // If only an ID is provided, take a shortcut.
     564        if ( isset( $args['id'] ) && count( $args ) === 1 ) {
     565                return get_site( $args['id'] );
     566        }
     567
     568        if ( isset( $args['id'] ) ) {
     569                if ( ! empty( $args['site__in'] ) ) {
     570                        $args['site__in'][] = $args['id'];
     571                } else {
     572                        $args['site__in'] = array( $args['id'] );
     573                }
     574
     575                unset( $args['id'] );
     576        }
     577
     578        if ( isset( $args['slug'] ) ) {
     579                $network = isset( $args['network_id'] ) ? get_network( $args['network_id'] ) : get_network();
     580
     581                // Create domain and path from the slug.
     582                if ( is_subdomain_install() ) {
     583                        $args['domain'] = trim( $args['slug'], '/' ) . '.' . preg_replace( '|^www\.|', '', $network->domain );
     584                        $args['path'] = $network->path;
     585                } else {
     586                        $args['domain'] = $network->domain;
     587                        $args['path'] = $network->path . trim( $args['slug'], '/' ) . '/';
     588                }
     589
     590                unset( $args['slug'] );
     591        } elseif ( isset( $args['url'] ) ) {
     592                $parts = wp_parse_url( $args['url'] );
     593                if ( ! $parts ) {
     594                        return null;
     595                }
     596
     597                // Create domain and path from the URL.
     598                $args['domain'] = $parts['host'];
     599                if ( ! empty( $parts['path'] ) ) {
     600                        $args['path'] = '/' . trim( $parts['path'], '/' ) . '/';
     601                } else {
     602                        $args['path'] = '/';
     603                }
     604
     605                unset( $args['url'] );
     606        } elseif ( isset( $args['domain'] ) && ! isset( $args['path'] ) ) {
     607
     608                // Do not allow domain-only lookup if not a subdomain install.
     609                if ( ! is_subdomain_install() && empty( $args['site__in'] ) ) {
     610                        return null;
     611                }
     612        } elseif ( isset( $args['path'] ) && ! isset( $args['domain'] ) ) {
     613
     614                // Do not allow path-only lookup if not a subdirectory install.
     615                if ( is_subdomain_install() && empty( $args['site__in'] ) ) {
     616                        return null;
     617                }
     618        }
     619
     620        // If none of these critical arguments are provided, bail.
     621        if ( ! isset( $args['site__in'] ) && ! isset( $args['domain'] ) && ! isset( $args['path'] ) ) {
     622                return null;
     623        }
     624
     625        // If the domain is prefixed with www., account for the unprefixed variant as well.
     626        if ( isset( $args['domain'] ) && substr( $args['domain'], 0, 4 ) == 'www.' ) {
     627                $nowww = substr( $args['domain'], 4 );
     628
     629                $args['domain__in'] = array( $nowww, $args['domain'] );
     630                unset( $args['domain'] );
     631        }
     632
     633        $args['number'] = 1;
     634        $args['fields'] = '';
     635        $args['count']  = false;
     636
     637        $sites = get_sites( $args );
     638
     639        if ( empty( $sites ) ) {
     640                return null;
     641        }
     642
     643        return array_shift( $sites );
     644}
     645
     646/**
    541647 * Adds any sites from the given ids to the cache that do not already exist in cache.
    542648 *
    543649 * @since 4.6.0