Как добавить 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 ) );
            }
        }
    }

person Sergio Redondo    schedule 05.04.2016    source источник


Ответы (2)


У меня была та же проблема, и я не хотел перезаписывать основные файлы WPML и не нашел решения, работающего с фильтром WPML, поэтому я просто написал hreflang x-default в заголовке 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 выводится под остальными, но, насколько я знаю, в этом нет особой необходимости.

person Claudius Herwig    schedule 10.10.2016

person    schedule
comment
У меня есть два языка на моем веб-сайте, и добавление этой функции означает добавление новой альтернативной ссылки вместо замены языка hreflang по умолчанию. - person edonbajrami; 26.02.2019
comment
Этот код предназначен для версии 3.x.x. Возможно, они изменили поведение в новых версиях (текущая версия 4.2.x) и этот код больше не нужен. Вы проверили? - person Martin from WP-Stars.com; 27.02.2019
comment
Тем не менее они не поддерживают x-default и их нужно добавлять вручную. Использование вашего кода не заменяет язык по умолчанию, а вместо этого добавляет новую ссылку. - person edonbajrami; 27.02.2019