web-dev-qa-db-fra.com

switch_to_blog (): charge le textdomain

J'utilise la fonctionnalité multisite de WordPress avec Multilingual Press Pro pour créer un site multilingue avec des messages liés.

Dans un plug-in activé par le réseau, les types de publication personnalisés sont enregistrés. Pour traduire le slug, j’utilise l10n:

'rewrite'   => array(
        'slug' => __( 'products', 'text-domain' ) . '/%product-category%',
        'with_front' => false
        )

Cela fonctionne bien. Toutefois, pour créer un lien vers l'article traduit sur un autre site du réseau, switch_to_blog() est utilisé. Comme dans cette fonction, aucun plug-in n'est (rechargé) chargé, mes fichiers de traduction ne sont pas chargés non plus, donc les permaliens que je récupère seront erronés.

Est-il possible de se connecter à switch_to_blog() pour charger un autre domaine de texte?

Merci!

5
luke

Vous pouvez vous accrocher à l'action switch_blog. Vous obtenez ici le nouvel identifiant de blog comme premier argument. Mais charger les fichiers de traduction complets ici est coûteux, vous devez également restaurer les anciens fichiers par la suite.

WordPress n'utilise pas les fonctions natives de gettext, mais du code personnalisé beaucoup plus lent. Voir # 17268 . La pénalité de performance pour cela serait énorme.

Filtrez plutôt les URL du plug-in, dans ce cas, mlp_linked_element_link, et utilisez une liste codée en dur de remplacements, comme ceci:

add_filter( 'mlp_linked_element_link', function( $url, $site_id ) {

    if ( 1 === (int) $site_id )
        return str_replace( '/produkt/', '/product/', $url );

    if ( 2 === (int) $site_id )
        return str_replace( '/product/', '/produkt/', $url );

    return $url;

}, 10, 2 );

C'est beaucoup plus rapide. Les liens permanents et la gestion des fichiers de langue sont toujours interrompus dans les multisites, vous devez vivre avec des compromis.

6
fuxia