Мне нужна помощь, перезаписывая WPML-функцию, которая выводит тег rel-alternate-hreflang. В идеале вы предоставили бы мне функцию, которую я могу разместить в моем детском файле theme.php.Как я могу переписать код функции WP плагина (WPML)?
Я использую популярный плагин WPML (WordPress Multi Language) для управления несколькими языками на многостраничном сайте WP. У меня есть один сайт (канадский), который является английским и французским, и другим сайтом (США), который является английским и испанским. Я хочу рассказать 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 /. Я ничего не могу сделать с сайтом в США, зная имя французской страницы или Канадский сайт, зная название испанской страницы. Эта информация не будет доступный в каждой базе данных мультисайта. Однако CAN против США Pagename 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». Я не хочу взломать этот файл, так как плагин регулярно обновляется. Поэтому, надеюсь, мы сможем переопределить его, если это возможно. Обратите внимание, что этот же скрипт выводит BOTH в США и Канаде, поэтому нам также необходимо выяснить, какой результат он создает, прежде чем мы сможем вычислить страницу с эквивалентом 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. Но это вопрос для другой должности, которую я подозреваю. Моя мысль - это решение, которое я ищу, было бы лучшим способом.
Благодарим за помощь!
Спасибо за ваш ответ.Ваша идея правильная, но на самом деле не работает, поскольку я думаю, что там есть переменные, которые зависят от другого кода в файле «wp-content/plugins/sitepress-multilingual-cms/sitepress.class.php». Я получил ошибку ... Неустранимая ошибка: использование $ this, если не в контексте объекта в mypath/functions.php в строке XXX – KingRobb
да, вы должны полностью переписать свой код. не использовать переменные за пределами своей области. Если вы хотите слегка изменить функцию, запустите свой функциональный блок с помощью 'global $ sitepress; $ this = $ sitepress; '. Могу работать, но я никогда не тестировал – kkarpieszuk
Хорошо, спасибо за ваше предложение @kkarpieszuk - К сожалению, это не сработало. Я получил следующее ... Неустранимая ошибка: не могу повторно назначить $ this ... – KingRobb