Einstellen von WPLANG über ein Plugin

11

Für eine einzelne Site WordPress muss die Sprache von wp-config.php's eingestellt werden WPLANG, aber ist es möglich, über mein Plugin festzulegen, welche den Standardwert überschreiben?

Howard
quelle
1
Der Link erscheint auch in der rechten Spalte dieser Seite, aber ich denke, es lohnt sich, in den Kommentaren einen anderen Ansatz für eine ähnliche Situation zu
erwähnen

Antworten:

16

In wp-includes/l10n.phpfinden Sie die Funktion get_locale(). Es bietet einen Filter; Sie können die Sprache einstellen und die Konstante ignorieren:

function get_locale() {
    global $locale;

    if ( isset( $locale ) )
        return apply_filters( 'locale', $locale );

    // WPLANG is defined in wp-config.
    if ( defined( 'WPLANG' ) )
        $locale = WPLANG;

    // If multisite, check options.
    if ( is_multisite() ) {
        // Don't check blog option when installing.
        if ( defined( 'WP_INSTALLING' ) || ( false === $ms_locale = get_option( 'WPLANG' ) ) )
            $ms_locale = get_site_option('WPLANG');

        if ( $ms_locale !== false )
            $locale = $ms_locale;
    }

    if ( empty( $locale ) )
        $locale = 'en_US';

    return apply_filters( 'locale', $locale );
}

Um es per Plugin zu ändern, benutze den Filter 'locale'. Beispiel:

add_filter( 'locale', 'wpse_52419_change_language' );
function wpse_52419_change_language( $locale )
{
    return 'de_DE';
}
Fuxia
quelle
Funktioniert wie eine Magie. In meinem Fall wird jedoch ein Fehler zurückgegeben : Fatal error: Cannot redeclare get_locale(). Also habe ich einfach den Funktionsnamen von get_locale()in geändert nano_get_locale()und es funktioniert wunderbar.
Mayeenul Islam
3
@MayeenulIslam Sie sollten die Funktion nicht kopieren get_locale(), das ist ein Zitat aus dem Kern. Sie benötigen lediglich den letzten Codeblock.
Fuxia
toll @toscho, vielen dank. Dies funktioniert jedoch nicht, wenn ich OPCache auf meinem lokalen MAMPpro einschalte ... ist das so oder gibt es eine Lösung?
Raphael Jeger
@RaphaelJeger Dies kann von OPCache nicht beeinflusst werden, nur ein Ausgabe-Chache kann dies tun. Wenn Sie dieses Problem immer noch haben, stellen Sie eine neue Frage.
Fuxia