Le home_url
du filtre du plugin WPML afin de fournir un lien vers la page d'accueil spécifique à la langue que vous visualisez. (Ainsi, si vous lisez une page en espagnol, home_url () vous indiquera http://example.com/es
). Je dois désactiver pour un site qui n'aura pas de pages d'accueil spécifiques à une langue. Je me suis donc lancé dans le plugin WPML, qui est essentiellement lancé de manière typique:
global $sitepress;
$sitepress = new SitePress();
Ensuite, dans le constructeur de la classe, le filtre incriminé est ajouté:
add_filter( 'home_url', array( $this, 'home_url' ), 1, 4 );
Avec la méthode de rappel de la classe étant (pour référence):
// filter for WP home_url function
function home_url( $url, $path, $orig_scheme, $blog_id )
{
// exception for get_page_num_link and language_negotiation_type = 3
if ( $this->settings[ 'language_negotiation_type' ] == 3 ) {
$debug_backtrace = debug_backtrace();
if ( !empty( $debug_backtrace[ 6 ] ) && $debug_backtrace[ 6 ][ 'function' ] == 'get_pagenum_link' )
return $url;
}
remove_filter( 'home_url', array( $this, 'home_url' ), 1 );
// only apply this for home url - not for posts or page permalinks since this filter is called there too
if ( ( did_action( 'template_redirect' ) && rtrim( $url, '/' ) == rtrim( get_home_url(), '/' ) ) || $path == '/' ) {
$url = $this->convert_url( $url );
}
add_filter( 'home_url', array( $this, 'home_url' ), 1, 4 );
return $url;
}
Cela semble être un cas simple de remove_filter
. Cependant, ajouter ce qui suit à functions.php (il devrait être dans un plugin spécifique à un site) ne semble pas supprimer le filtre et le logo principal (qui utilise la fonction home_url()
pointe toujours sur la page d’accueil spécifique à la langue).
function rar_remove_wpml_home_filter(){
global $sitepress;
remove_filter( 'home_url', array( $sitepress, 'home_url' ), 1, 4 );
}
add_action( 'plugins_loaded', 'rar_remove_wpml_home_filter' );
J'ai également essayé d'exécuter ceci sur le hook init
. Il me semble qu'il me manque quelque chose d'évident.
J'ai trouvé qu'il fallait supprimer 4 filtres/actions pour annuler la modification home_url
de WPML. Comme je ne savais pas quoi sinon cela pourrait casser, j'ai finalement changé le logo de mon site pour utiliser site_url()
qui, dans mon cas, était identique, mais non modifié par WPML.
function disable_things(){
remove_filter( 'page_link', array( $this, 'permalink_filter' ), 1, 2 );
remove_action( 'wp_head', array( $this, 'front_end_js' ) );
remove_filter( 'feed_link', array( $this, 'feed_link' ) );
remove_filter( 'home_url', array( $this, 'home_url' ), 1, 4 );
}
add_action( 'wp_head', 'disable_things', 20 );
Je l'ai fait comme ça. Filtre WPML utilisé et URL renvoyée par défaut plutôt que filtrée.
function custom_wpml_home_url( $home_url, $url, $path, $orig_scheme, $blog_id ) {
return $url;
}
add_filter( 'wpml_get_home_url', 'custom_wpml_home_url', 99, 5 );
Qu'en est-il d'adopter une approche différente?
Conservez le filtre et dans WPML -> Langues, choisissez "Utiliser le répertoire pour la langue par défaut".
Vous pouvez y spécifier un fichier statique ou créer une "page racine".
Cette page ne sera connectée à aucune langue. Il ne montrera même pas le sélecteur de langue (sauf si vous utilisez un modèle personnalisé et jouez avec le code).
Vous pouvez utiliser get_option( 'home' );
Il vous redonnera l’adresse Web personnelle du blog définie dans Options générales.