2016-02-29 9 views
0

Мне нужна помощь, перезаписывая 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('&amp;', '&', $alternate_hreflang)); 
     } 
    } 
} 

Можно ли это сделать?Альтернативно мне было интересно, есть ли способ найти эти теги с помощью jQuery, получить ссылку на страницу, добавить «/ ca» или удалить ее и вставить дополнительный тег с соответствующим hreflang. Но это вопрос для другой должности, которую я подозреваю. Моя мысль - это решение, которое я ищу, было бы лучшим способом.

Благодарим за помощь!

ответ

0

Вы можете удалить выполнение этой функции:

remove_action('wp_head', array("SitePress","head_langs")) 

и затем зарегистрировать Вашу собственную функцию

add_action("wp_head","my_own_head_langs_fn"); 
function my_own_head_langs_fn() { 
// paste here your modified version of head_langs 
} 
+0

Спасибо за ваш ответ.Ваша идея правильная, но на самом деле не работает, поскольку я думаю, что там есть переменные, которые зависят от другого кода в файле «wp-content/plugins/sitepress-multilingual-cms/sitepress.class.php». Я получил ошибку ... Неустранимая ошибка: использование $ this, если не в контексте объекта в mypath/functions.php в строке XXX – KingRobb

+0

да, вы должны полностью переписать свой код. не использовать переменные за пределами своей области. Если вы хотите слегка изменить функцию, запустите свой функциональный блок с помощью 'global $ sitepress; $ this = $ sitepress; '. Могу работать, но я никогда не тестировал – kkarpieszuk

+0

Хорошо, спасибо за ваше предложение @kkarpieszuk - К сожалению, это не сработало. Я получил следующее ... Неустранимая ошибка: не могу повторно назначить $ this ... – KingRobb

 Смежные вопросы

  • Нет связанных вопросов^_^