Make WordPress Core


Ignore:
Timestamp:
10/13/2015 11:45:14 PM (10 years ago)
Author:
johnbillion
Message:

Introduce a language chooser to the site signup process on Multisite.

If your Multisite installation is one of the relatively few that allows new sites to be registered, either by existing users or by new visitors to your site, a 'Site Language' dropdown menu will now be presented if your network has additional languages installed. This option defaults to the value of the 'Default Language' setting on the Network Admin Settings screen, and is restricted to currently installed languages.

The languages available in this setting can be controlled via the signup_get_available_languages filter. To disable it completely, return an empty array.

Fixes #33844
Props DrewAPicture, johnbillion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-signup.php

    r34912 r35152  
    5757            .mu_register #blogname,
    5858            .mu_register #user_name { width:100%; font-size: 24px; margin:5px 0; }
     59        .mu_register #site-language { display: block; }
    5960        .mu_register .prefix_address,
    6061            .mu_register .suffix_address {font-size: 18px;display:inline; }
     
    121122    echo '<input name="blog_title" type="text" id="blog_title" value="'.esc_attr($blog_title).'" />';
    122123    ?>
     124
     125    <?php
     126    // Site Language.
     127    $languages = signup_get_available_languages();
     128
     129    if ( ! empty( $languages ) ) :
     130        ?>
     131        <p>
     132            <label for="site-language"><?php _e( 'Site Language:' ); ?></label>
     133            <?php
     134            // Network default.
     135            $lang = get_site_option( 'WPLANG' );
     136
     137            if ( isset( $_POST['WPLANG'] ) ) {
     138                $lang = $_POST['WPLANG'];
     139            }
     140
     141            // Use US English if the default isn't available.
     142            if ( ! in_array( $lang, $languages ) ) {
     143                $lang = '';
     144            }
     145
     146            wp_dropdown_languages( array(
     147                'name'                        => 'WPLANG',
     148                'id'                          => 'site-language',
     149                'selected'                    => $lang,
     150                'languages'                   => $languages,
     151                'show_available_translations' => false,
     152            ) );
     153            ?>
     154        </p>
     155    <?php endif; // Languages. ?>
    123156
    124157    <div id="privacy">
     
    331364    );
    332365
     366    // Handle the language setting for the new site.
     367    if ( ! empty( $_POST['WPLANG'] ) ) {
     368
     369        $languages = signup_get_available_languages();
     370
     371        if ( in_array( $_POST['WPLANG'], $languages ) ) {
     372            $language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) );
     373
     374            if ( $language ) {
     375                $blog_meta_defaults['WPLANG'] = $language;
     376            }
     377        }
     378
     379    }
     380
    333381    /**
    334382     * Filter the new site meta variables.
     
    340388     */
    341389    $meta_defaults = apply_filters( 'signup_create_blog_meta', $blog_meta_defaults );
     390
    342391    /**
    343392     * Filter the new default site meta variables.
     
    632681    $signup_meta = array ('lang_id' => 1, 'public' => $public);
    633682
     683    // Handle the language setting for the new site.
     684    if ( ! empty( $_POST['WPLANG'] ) ) {
     685
     686        $languages = signup_get_available_languages();
     687
     688        if ( in_array( $_POST['WPLANG'], $languages ) ) {
     689            $language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) );
     690
     691            if ( $language ) {
     692                $signup_meta['WPLANG'] = $language;
     693            }
     694        }
     695
     696    }
     697
    634698    /** This filter is documented in wp-signup.php */
    635699    $meta = apply_filters( 'add_signup_meta', $signup_meta );
     
    671735    /** This action is documented in wp-signup.php */
    672736    do_action( 'signup_finished' );
     737}
     738
     739/**
     740 * Retrieves languages available during the site/user signup process.
     741 *
     742 * @since 4.4.0
     743 *
     744 * @see get_available_languages()
     745 *
     746 * @return array List of available languages.
     747 */
     748function signup_get_available_languages() {
     749    /**
     750     * Filter the list of available languages for front-end site signups.
     751     *
     752     * Passing an empty array to this hook will disable output of the setting on the
     753     * signup form, and the default language will be used when creating the site.
     754     *
     755     * Languages not already installed will be stripped.
     756     *
     757     * @since 4.4.0
     758     *
     759     * @param array $available_languages Available languages.
     760     */
     761    $languages = (array) apply_filters( 'signup_get_available_languages', get_available_languages() );
     762
     763    /*
     764     * Strip any non-installed languages and return.
     765     *
     766     * Re-call get_available_languages() here in case a language pack was installed
     767     * in a callback hooked to the 'signup_get_available_languages' filter before this point.
     768     */
     769    return array_intersect_assoc( $languages, get_available_languages() );
    673770}
    674771
Note: See TracChangeset for help on using the changeset viewer.