Спрашиваем и отвечаем по Wordpress-12

S3
На сайте с 28.12.2010
Offline
134
#581
ortegas:
Речь идет о qTranslate или об обновленной версии qTranslate X?

qTranslate
https://wordpress.org/plugins/qtranslate/

qTranslate X
https://wordpress.org/plugins/qtranslate-x/

Если вы работали с qTranslate, можете проверить наличие проблемы в актуальной версии qTranslate X.

Далее, нужно смотреть исходный код класса виджета.
Если нужный вам функционал не предусмотрен по задумке самого виджета, его класс можно наследовать и переписать отдельный методы.

qtranslate-x таки. Виджет стандартный и судя по всему не предусмотрен функционал.

O
На сайте с 29.05.2008
Offline
195
#582
srs3000:
qtranslate-x таки. Виджет стандартный и судя по всему не предусмотрен функционал.

Я посмотрел исходный код класса виджета.

За формирование ссылки на языковую версию отвечает функция qtranxf_convertURL.

Здесь описана проблема

https://github.com/qTranslate-Team/qtranslate-x/issues/161

Простыми словами, в виджете ссылка формируется без учета настройки перезаписи ссылок для языка по-умолчанию.

(как я понимаю, последний параметр в функции установлен в true, а должен быть false)

Я не уверен, сможете ли вы применить рекомендации по перезаписи класса виджета, поэтому, ограничусь определением ошибки.

bismark132
На сайте с 03.06.2016
Offline
52
#583

Возможно не в тему спрошу, но все же по ВП.) Как закрыть от индексации ссылку ответа в комментариях, то есть есть страница site.ru/post/, если кто-то написал коммент, то у него автоматически появляется ссылка Ответить, которая имеет адрес site.ru/post/#comment-. Содержимое страницы 100% одинаковое с оригиналом - соответственно для поисковых систем это дубли. Как правильно закрыть эти ссылки от индексации? Пробовал в robots Disalow: *comment-* - не закрывает. Я так понимаю нужно как-то в коде добавить <noindex> к ссылке Ответить. Может кто-то сталкивался с такой проблемой? Буду благодарен за помощь.

S3
На сайте с 28.12.2010
Offline
134
#584
ortegas:
Я посмотрел исходный код класса виджета.

За формирование ссылки на языковую версию отвечает функция qtranxf_convertURL.

Здесь описана проблема
https://github.com/qTranslate-Team/qtranslate-x/issues/161

Простыми словами, в виджете ссылка формируется без учета настройки перезаписи ссылок для языка по-умолчанию.
(как я понимаю, последний параметр в функции установлен в true, а должен быть false)

Я не уверен, сможете ли вы применить рекомендации по перезаписи класса виджета, поэтому, ограничусь определением ошибки.

спасибо

if(!function_exists('qtrans_convertURL')){

function qtrans_convertURL($url='', $lang='', $forceadmin = false, $showDefaultLanguage = true){
return qtranxf_convertURL($url, $lang, $forceadmin, $showDefaultLanguage);
}

изменил. Но ничего не изменилось на сайте. Кэша нет

O
На сайте с 29.05.2008
Offline
195
#585
srs3000:
изменил. Но ничего не изменилось на сайте. Кэша нет

Что и где изменили?

qtrans_convertURL не используется в виджете.

В виджете используется qtranxf_convertURL напрямую.

Вот исходный код функции qtranslate_core.php, которая генерирует ссылки.

Функцию править не нужно, как я догадываюсь.

Нужно отредактировать ее вызов в классе виджета (унаследовав его).

Оригинальные файлы плагина лучше не перезаписывать, иначе все изменения могут быть потеряны после обновления плагина.


function qtranxf_convertURL($url='', $lang='', $forceadmin = false, $showDefaultLanguage = false) {
global $q_config;

if(empty($lang)) $lang = $q_config['language'];
if(empty($url)){
if( $q_config['url_info']['doing_front_end'] && defined('QTS_VERSION') && $q_config['url_mode'] != QTX_URL_QUERY){
//quick workaround, but need a permanent solution
$url = qts_get_url($lang);
//qtranxf_dbg_log('qtranxf_convertURL: qts_get_url: url=', $url);
if(!empty($url)){
if($showDefaultLanguage && $q_config['hide_default_language'] && $lang==$q_config['default_language'])
$url=qtranxf_convertURL($url,$lang,$forceadmin,true);
return $url;
}
}
//$url = esc_url($q_config['url_info']['url']);
}
if( !$q_config['url_info']['doing_front_end'] && !$forceadmin ) return $url;
if(!qtranxf_isEnabled($lang)) return '';

if(!$showDefaultLanguage) $showDefaultLanguage = !$q_config['hide_default_language'];
$showLanguage = $showDefaultLanguage || $lang != $q_config['default_language'];
//qtranxf_dbg_log('qtranxf_convertURL('.$url.','.$lang.'): showLanguage=',$showLanguage);
$complete = qtranxf_get_url_for_language($url, $lang, $showLanguage);
//qtranxf_dbg_log('qtranxf_convertURL: complete: ',$complete);
return $complete;
}

Это по сути, мастер-функция на qtranxf_get_url_for_language


function qtranxf_get_url_for_language($url, $lang, $showLanguage=true) {
global $q_config;
static $url_cache=array();
//qtranxf_dbg_log('qtranxf_get_url_for_language: $url_cache:',$url_cache);
if(!isset($url_cache[$url])) $url_cache[$url] = array();
$urlinfo = &$url_cache[$url];
//$urlinfo = apply_filters('qtranslate_url_for_language_pre', $urlinfo, $url, $lang, $showLanguage);

if($showLanguage){
if(isset($urlinfo[$lang])){
//qtranxf_dbg_log('qtranxf_get_url_for_language: cached: lang='.$lang.': ',$urlinfo);
return $urlinfo[$lang];
}
}else{
if(isset($urlinfo['bare'])){
//qtranxf_dbg_log('qtranxf_get_url_for_language: cached: bare: ',$urlinfo);
return $urlinfo['bare'];
}
}

if(isset($urlinfo['language_neutral'])){
//qtranxf_dbg_log('qtranxf_get_url_for_language: cached: language_neutral: ',$urlinfo);
return $urlinfo['language_neutral'];
}

$homeinfo = qtranxf_get_home_info();
if(!isset($urlinfo['url_parsed'])){
if(empty($url)){
$urlinfo = qtranxf_copy_url_info($q_config['url_info']);

if( isset($urlinfo['wp-path']) && qtranxf_language_neutral_path($urlinfo['wp-path']) ){
//qtranxf_dbg_log('qtranxf_get_url_for_language: language_neutral: wp-path: url='.$url.':',$urlinfo);
$complete = qtranxf_buildURL($urlinfo,$homeinfo);
if(!isset($url_cache[$complete])) $url_cache[$complete] = $urlinfo;
$urlinfo['language_neutral'] = $complete;
return $complete;
}

}
else{
$urlinfo = qtranxf_get_url_info($url);

// check if it's an external link
if(!isset($urlinfo['wp-path'])){
$urlinfo['language_neutral'] = $url;
//qtranxf_dbg_log('qtranxf_get_url_for_language: language_neutral: external path: ',$urlinfo);
return $url;
}

if(empty($urlinfo['host'])){
if(empty($urlinfo['wp-path'])){
if(empty($urlinfo['query']) ){
$urlinfo['language_neutral'] = $url;
//qtranxf_dbg_log('qtranxf_get_url_for_language: language_neutral: relative path: ',$urlinfo);
return $url;
}
}else{
switch($urlinfo['wp-path'][0]){
case '/': break;
case '#': {
$urlinfo['language_neutral'] = $url;
//qtranxf_dbg_log('qtranxf_get_url_for_language: language_neutral: relative hash: ',$urlinfo);
return $url;
}
default: $urlinfo['wp-path'] = trailingslashit($q_config['url_info']['wp-path']).$urlinfo['wp-path']; break;
}
}
}elseif(qtranxf_external_host_ex($urlinfo['host'],$homeinfo)){
$urlinfo['language_neutral'] = $url;
//qtranxf_dbg_log('qtranxf_get_url_for_language: language_neutral: external host: ',$urlinfo);
return $url;
}

if(qtranxf_language_neutral_path($urlinfo['wp-path'])){
$urlinfo['language_neutral'] = $url;
//qtranxf_dbg_log('qtranxf_get_url_for_language: language_neutral: wp-path: ',$urlinfo);
return $url;
}

qtranxf_url_del_language($urlinfo);
}
$urlinfo['url_parsed'] = $url;
}

$urlinfo_lang = qtranxf_url_set_language($urlinfo,$lang,$showLanguage);
$complete = qtranxf_buildURL($urlinfo_lang,$homeinfo);
//$complete = apply_filters('qtranslate_url_for_language',$complete,$lang,$urlinfo_lang,$homeinfo);
if($showLanguage){
$urlinfo[$lang] = $complete;
}else{
$urlinfo['bare'] = $complete;
}
if(!isset($url_cache[$complete])) $url_cache[$complete] = $urlinfo;
//qtranxf_dbg_log('done: qtranxf_get_url_for_language('.$lang.($showLanguage?', true':', false').'): $urlinfo=',$urlinfo,false);
return $complete;
}
S3
На сайте с 28.12.2010
Offline
134
#586
ortegas:
Что и где изменили?

qtrans_convertURL не используется в виджете.
В виджете используется qtranxf_convertURL напрямую.

переменную $showDefaultLanguage в qtranslate_compatibility.php в функции qtrans_convertURL, как описано по вашей ссылке, если я вас верно понял.

в каком файле нужно изменить qtranxf_convertURL и что именно, по вашему мнению?

Спасибо, что вникли в проблему

S
На сайте с 30.09.2016
Offline
469
#587
bismark132:
Как закрыть от индексации ссылку ответа в комментариях, то есть есть страница site.ru/post/, если кто-то написал коммент, то у него автоматически появляется ссылка Ответить, которая имеет адрес site.ru/post/#comment-.

Не занимайтесь ерундой, не надо тут ничего делать.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
O
На сайте с 29.05.2008
Offline
195
#588
bismark132:
Возможно не в тему спрошу, но все же по ВП.) Как закрыть от индексации ссылку ответа в комментариях, то есть есть страница site.ru/post/, если кто-то написал коммент, то у него автоматически появляется ссылка Ответить, которая имеет адрес site.ru/post/#comment-. Содержимое страницы 100% одинаковое с оригиналом - соответственно для поисковых систем это дубли. Как правильно закрыть эти ссылки от индексации? Пробовал в robots Disalow: *comment-* - не закрывает. Я так понимаю нужно как-то в коде добавить <noindex> к ссылке Ответить. Может кто-то сталкивался с такой проблемой? Буду благодарен за помощь.

Google распознает якорные ссылки, как отдельные страницы.

Однако, по ссылкам #comment- указан rel="canonical" на страницу без якоря.

Соответственно, вес никуда не уплывает.

Я думаю, разработчики Wordpress хорошо знакомы с алгоритмами работы Google.

Хорошо взвесили плюсы и риски, при реализации данного функционала.

---------- Добавлено 07.01.2018 в 20:40 ----------

srs3000:
переменную $showDefaultLanguage в qtranslate_compatibility.php в функции qtrans_convertURL, как описано по вашей ссылке, если я вас верно понял.
в каком файле нужно изменить qtranxf_convertURL и что именно, по вашему мнению?
Спасибо, что вникли в проблему

Простого решения, типа добавить строчку в functions.php нету, потому, что плагин qTranslate почти не использует систему хуков.

Соответственно, нельзя отловить и модифицировать участок кода, можно его только переписать.

Если вы знакомы с программированием, тогда вам нужно унаследовать класс qTranslateXWidget и модифицировать методы, где вызывается qtranxf_convertURL (то-есть, создать новый виджет на основе класса виджета плагина).

Либо переписать исходный код виджета (или функции), но в таком случае, правки нужно будет вносить повторно после каждого обновления плагина.

S3
На сайте с 28.12.2010
Offline
134
#589

спасибо. ясно.

странно конечно, что такой известный плагин создает 302 редирект, по сути это серьезный seo косяк

bismark132
На сайте с 03.06.2016
Offline
52
#590
ortegas:
Google распознает якорные ссылки, как отдельные страницы.
Однако, по ссылкам #comment- указан rel="canonical" на страницу без якоря.
Соответственно, вес никуда не уплывает.

Я думаю, разработчики Wordpress хорошо знакомы с алгоритмами работы Google.
Хорошо взвесили плюсы и риски, при реализации данного функционала.

Большое спасибо за ответ. Теперь буду спать спокойно.))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий