Мне нужна помощь, пожалуйста, перезапишите функцию WPML, которая выводит тег rel-alternate-hreflang. В идеале вы должны предоставить мне функцию, которую я могу поместить в файл function.php моей дочерней темы.
Я использую популярный плагин WPML (WordPress Multi Language) для управления несколькими языками на сайте WP Multi. У меня есть один сайт (канадский) на английском и французском языках, а другой сайт (США) на английском и испанском языках. Я хочу рассказать Google о другом сайте в отношении реализации тега rel-alternate-hreflang. Это должно помочь Google направлять канадцев на эквивалентную страницу в Канаде и наоборот для посетителей из США. В настоящее время плагин WPML (который управляет ОБОИМ сайтом в мультисайте) выводит ...
На сайте США....
<link rel="alternate" hreflang="en-US" href="http://siteaddress.com/pagename" />
<link rel="alternate" hreflang="es" href="http://siteaddress.com/es/spanishpagename" />
На канадском сайте....
<link rel="alternate" hreflang="en-CA" href="http://siteaddress.com/ca/pagename" />
<link rel="alternate" hreflang="fr" href="http://siteaddress.com/es/spanishpagename" />
НО Я ХОЧУ, ЧТОБЫ ЭТО ВЫВОДИЛОСЬ...
(обратите внимание, что названия английских страниц идентичны, единственное отличие состоит в /ca/. Я ничего не могу поделать с сайтом в США, зная название французской страницы или канадский сайт, знающий название страницы на испанском языке. Эта информация не будет доступна в каждой многосайтовой базе данных. Однако URL-адреса имен страниц в Канаде и США — это простой расчет после извлечения ссылки href)
На сайте США....
<link rel="alternate" hreflang="en-US" href="http://siteaddress.com/pagename" />
<link rel="alternate" hreflang="es" href="http://siteaddress.com/es/spanishpagename" />
<link rel="alternate" hreflang="en-CA" href="http://siteaddress.com/ca/pagename" />
На канадском сайте....
<link rel="alternate" hreflang="en-CA" href="http://siteaddress.com/ca/pagename" />
<link rel="alternate" hreflang="fr" href="http://siteaddress.com/es/spanishpagename" />
<link rel="alternate" hreflang="en-US" href="http://siteaddress.com/pagename" />
Я пытался обратиться за технической поддержкой в WPML, но не получил той помощи, на которую надеялся. Поэтому я нашел функцию, которая создает этот вывод в файле «wp-content/plugins/sitepress-multilingual-cms/sitepress.class.php». Я не хочу взламывать этот файл, так как плагин регулярно обновляется. Так что, надеюсь, мы сможем переопределить его, если это возможно. Обратите внимание, что этот же сценарий выводит ОБА вывод для США и Канады, поэтому нам также нужно сначала выяснить, какой вывод он создает, прежде чем мы сможем рассчитать эквивалентную страницу CAN и США.
Код функции выглядит так...
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( '&', '&', $alternate_hreflang ) );
}
}
}
Можно ли это сделать? В качестве альтернативы мне было интересно, есть ли способ найти эти теги с помощью jQuery, получить ссылку на страницу, добавить "/ca" или удалить ее и вставить дополнительный тег с помощью соответствующий hreflang. Но я подозреваю, что это вопрос для другого поста. Я думаю, что приведенное выше решение, которое я ищу, было бы лучшим способом.
Спасибо за твою помощь!