Как добавить hreflang=''x-default'' в плагин WPML 3.3.6?

WPML - отличный плагин для управления многоязычными сайтами, так как он позволяет редактировать много релевантной информации, связанной с переведенным контентом. Однако, хотя этот плагин добавляет теги hreflang, отсутствует поддержка аннотации hreflang="x-default".

Поэтому я хотел бы знать, как добавить этот тег x-default на сайты WPML и сделать так, чтобы он указывал на желаемую языковую версию URL.

Есть несколько примеров кода на форумах WPML, но они предназначены для более старых версий этого плагина. Все они указывают на редактирование функции head_langs, которая в настоящее время состоит из следующего кода:

function head_langs()
    {
        $languages = $this->get_ls_languages( array( 'skip_missing' => true ) );
        // If there are translations and is not paged content...

        //Renders head alternate links only on certain conditions
        $the_post = get_post();
        $the_id   = $the_post ? $the_post->ID : false;
        $is_valid = count( $languages ) > 1 && !is_paged() && ( ( ( is_single() || is_page() ) && $the_id && get_post_status( $the_id ) == 'publish' ) || ( is_home() || is_front_page() || is_archive() ) );

        if ( $is_valid ) {
            foreach ( $languages as $code => $lang ) {
                $alternate_hreflang = apply_filters( 'wpml_alternate_hreflang', $lang[ 'url' ], $code );
                printf( '<link rel="alternate" hreflang="%s" href="%s" />' . PHP_EOL,
                        $this->get_language_tag( $code ),
                        str_replace( '&amp;', '&', $alternate_hreflang ) );
            }
        }
    }

Заранее спасибо!

2 ответа

/* ---------------------------------------------------------------------------
 * Set hreflang="x-default" according to Google content guidelines with WPML
 * Put into your functions.php - don't forget to use a child-theme ;-)
 * --------------------------------------------------------------------------- */
add_filter('wpml_alternate_hreflang', 'wps_head_hreflang_xdefault', 10, 2);
function wps_head_hreflang_xdefault($url, $lang_code) {

    if($lang_code == apply_filters('wpml_default_language', NULL )) {

        echo '<link rel="alternate" href="' . $url . '" hreflang="x-default" />';
    }

    return $url;
}

У меня была та же проблема, и я не хотел перезаписывать основные файлы WPML, и при этом я не нашел решения, работающего с фильтром WPML, поэтому я просто написал x-default hreflang в заголовок WordPress следующим образом:

 // add x-default to hreflang
function x_default_hreflang() {
    $languages = icl_get_languages('skip_missing=1');
    foreach($languages as $l){
        if ( $l['language_code'] == 'en' ) { // set your default language
            $x_default_url = $l['url'];
            $output='<link rel="alternate" hreflang="x-default" href="' . $x_default_url . '" />'  . PHP_EOL;
            echo $output;
        } 
    }
}

add_action('wp_head','x_default_hreflang',1);

Приоритет над add_action довольно высок, поэтому альтернативная ссылка hreflang выводится ниже остальных, но, насколько я знаю, в этом нет особой необходимости.

Другие вопросы по тегам