web-dev-qa-db-fra.com

Permettre l'enregistrement de caractères non latins

Je viens de Turquie et nous avons des caractères "şŞçÇğĞüÜöÖıİ" dans notre alphabet.

Je veux utiliser ces caractères dans permaliens/slugs/noms d'utilisateur. J'ai trouvé une solution temporaire pour les permaliens/slugs avec piratage de base. Il n’ya pas d’autre option, à part le piratage. Vous pouvez trouver une solution ici:

http://core.trac.wordpress.org/ticket/15248

Mon problème est que l'enregistrement des utilisateurs nécessite un petit correctif après celui-ci aussi. Heureusement, il existe un filtre que je peux utiliser mais que je ne pourrais pas gérer:

dans wordpress includes/formating.php:

function sanitize_user( $username, $strict = false ) {
 $raw_username = $username;
 $username = wp_strip_all_tags( $username );
 $username = remove_accents( $username );
 // Kill octets
 $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username );
 $username = preg_replace( '/&.+?;/', '', $username ); // Kill entities

 // If strict, reduce to ASCII for max portability.
 if ( $strict )
  $username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );

 $username = trim( $username );
 // Consolidate contiguous whitespace
 $username = preg_replace( '|\s+|', ' ', $username );

 return apply_filters( 'sanitize_user', $username, $raw_username, $strict );
}

Cette section de code produit une erreur:

 if ( $strict )
  $username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );

D'une manière ou d'une autre je dois désactiver cette section. Mais je ne sais pas comment le faire.

3
Ünsal Korkmaz

Essayez ceci (non testé, j'espère ne pas le court-circuiter dans une boucle sans fin):

add_filter('sanitize_user', 'non_strict_login', 10, 3);

function non_strict_login( $username, $raw_username, $strict ) {

    if( !$strict )
        return $username;

    return sanitize_user(stripslashes($raw_username), false);
}
2
Rarst