web-dev-qa-db-fra.com

Supprimer le filtre home_url de WPML

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.

2
helgatheviking

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 );
1
helgatheviking

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 );
1
Pavol Caban

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).

0
Andrea Sciamanna

Vous pouvez utiliser get_option( 'home' );

Il vous redonnera l’adresse Web personnelle du blog définie dans Options générales.

0
Vuk Vukovic