! Михалика - запросто с WordPress:
доступная ручная работа по правилам оптимального интернет(а)
Здравствуйте !
— отредактировано:  2017-07-17
издатель:   в теме: Плагины...  реплики: будьте первым в диалоге
 
Запросто с WordPress - студия занимательная МИХАЛИКА

Как закрыть ссылки меток в сайдбаре — jquery js аякс — или плагин закрытых меток tagATs…

Использование меток, на мой взгляд, очень неплохое желание админа сайта: это удобно, в первую очередь, для пользователя (usability — юзабилити и всякие там CTR) а раз удобно на нашем сайте посетителю, значит выгодно и нам!

Однако многие seoшники нагоняют страха в глаза новичку владельцу сайта, мол, использование тегов (меток) вредно сказывается на индексации площадки — типа это создаёт дубли страниц, ибо ссылки меток трудно скрыть от глаз поисковых систем: и вправду — трудности в этом есть!

Однако сегодня расскажу, как всё же закрыть ссылки в виджете «Облако меток» раз и навсегда — способ ajax (аякс). Проверено !! — докажем это валидаторами и тестерами…

Варианты решения задачи — 1: без плагина и 2: плагин закрытых меток tagATs, который замечательным образом можно скачать.

Вперёд-вперёд, веб мастер…


закроем ссылки тегов сайдбара — без плагина


 

 

На самом деле всё просто ! разжёвывать очень уж не буду… в конце концов есть же комментарии…

 

 

Главная цель нашего занятия в том, что мы перенесём из ядра WP /wp-includes/category-template.php функцию организации меток wp_tag_cloud и генерирования wp_generate_tag_cloud в свой шаблон (или организуем плагин) — в итоге получится так, что как бы мы создадим свои функции отработки «Облака меток-тегов», выполняющие задачи вывода же тегов в каком-то месте нашего сайта…

 

Ядрёные функции переименуем, скажем, такими именами — wp_tag2_cloud и wp_generate_tag2_cloud.

Вот в принципе и всё.

 

Все необходимы правки в коде ниже я уже сделал — вам только всего-то нужно выполнить нынешние действия последовательно и без ошибок.

 

 

 

Почему нельзя закрыть ссылки меток как-то, например, фильтрами или костылями какими, спросите вы??

Можно… но это не совсем оправдано, ибо много городить придётся, да и коли мы сегодня выбрали методику аякс, то в этом случае ждут и ещё затруднения, ибо валидатор HTML покажет в ссылках тегов ошибки class и дубль class…

Потому что css методы AJAX закрытой ссылки обозначен в class .external-reference2 и id тега тоже в class — средствами которого задаётся регулировка размера шрифта ссылок — классы обусловят ошибки!

Вот почему достаточно трудно реализовать нашу задачу ранее описанными в интернете способами.

Можно, конечно, оставить ошибки или вовсе отказаться от «Облака меток» как многие и делают опрометчиво… — страшного ничего не произойдёт…

Но лично я ошибки не жалую… да и удобства для пользователя важны!

 

 

 

А посему… приступим… занавес представления открывается…

 

 

 

 

изучим свой шаблон на предмет подключения библиотеки jquery-js-аякс

 

 

 

 

Прежде всего нужно проверить у себя в активном шаблоне подключена ли библиотека jquery js аякс:

 

 

Открываем файл футера — footer.php и смотрим попристальнее…

 

…у кого-то может быть подключение локально (т.е файл скрипта библио расположен внутри шаблона — я делаю так):

 

<script src="//mihalica.ru/wp-content/themes/шаблон/lib/js/jquery-1.12.4.min.js"></script> <script>

 

 

…а у кого-то со стеллажей Google (т.е подгружается из недр google):

 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

 

 

А коли у вас в шаблоне библиотека не подключена, то нужно её подключить в файле активного шаблона — footer.php, прописав строку показанную выше перед закрывающим тегом </body>. Либо же скачать файл… поместить куда-то в папку своего шаблона и, указав путь также подключить — строка-вариант первый…

 

У меня, как видите на скрине, подключено локально…

 

 

 

плагин закрытых меток

 

 

…и тут же после неё добавьте строчку, которая ниже — необходимую для задачи обработки ссылок методом аякс (подробнее о принципе мето́ды, а также как закрыть и избавиться от сквозных ссылок):

 

 

<script>$('.external-reference2').replaceWith (function (){return'<a href="'+$(this).data ('link')+'" title="'+$(this).text ()+'">'+$(this).html ()+'</a>';})</script>

 

 

В нашем варианте ссылка тегов (метки) будет открываться в этом же окне браузера.

 

 

Ну и теперь пропишем основной новый код отработки тегов в файл functions.php своего активного шаблона:

 

 

 

Тут-скрипт

/** старт функции меток из ядра: wp_tag2_cloud **/
function wp_tag2_cloud( $args = '' ) {
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'post_type' => '', 'echo' => true
);
$args = wp_parse_args( $args, $defaults );

$tags = get_terms( $args['taxonomy'], array_merge( $args, array( 'orderby' => 'count', 'order' => 'DESC' ) ) ); // Always query top tags

if ( empty( $tags ) || is_wp_error( $tags ) )
return;

foreach ( $tags as $key => $tag ) {
if ( 'edit' == $args['link'] )
$link = get_edit_term_link( $tag->term_id, $tag->taxonomy, $args['post_type'] );
else
$link = get_term_link( intval($tag->term_id), $tag->taxonomy );
if ( is_wp_error( $link ) )
return;

$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}

$return = wp_generate_tag2_cloud( $tags, $args ); // Вот где эти верхние теги сортируются по $args
//Фильтры тег вывода облака
// @since 2.3.0
// @param string $return HTML-вывода облака тегов
// @param array $args Массив тегов аргументы облака
$return = apply_filters( 'wp_tag2_cloud', $return, $args );

if ( 'array' == $args['format'] || empty($args['echo']) )
return $return;

echo $return;
}
/*** ФИНАЛ - старт функции меток из ядра: wp_tag2_cloud ***/

// по умолчанию масштабирование для тега ссылки - @param int $count number постов с этим tag - @return int scaled count
//function default_topic_count_scale( $count ) {
//return round(log10($count + 1) * 100);
//}
/*** масштабирование для тега ссылки ***/

/*** СТАРТУЕМ ГЕНЕРАТОР ФУНКЦИИ ТЕГОВ ИЗ ЯДРА WP /wp-includes/category-template.php ***/
function wp_generate_tag2_cloud( $tags, $args = '' ) {
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 0,
'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
'topic_count_text' => null, 'topic_count_text_callback' => null,
'topic_count_scale_callback' => 'default_topic_count_scale', 'filter' => 1,
);

$args = wp_parse_args( $args, $defaults );

$return = ( 'array' === $args['format'] ) ? array() : '';

if ( empty( $tags ) ) {
return $return;
}
// Передергивать тему граф подсказки...
if ( isset( $args['topic_count_text'] ) ) {
// Первый взгляд на nooped поддержку во множественном числе через topic_count_text
$translate_nooped_plural = $args['topic_count_text'];
} elseif ( ! empty( $args['topic_count_text_callback'] ) ) {
// Искать альтернативный стиль обратного вызова. Игнорировать предыдущие по умолчанию
if ( $args['topic_count_text_callback'] === 'default_topic_count_text' ) {
$translate_nooped_plural = _n_noop( '%s topic', '%s topics' );
} else {
$translate_nooped_plural = false;
}
} elseif ( isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) {
// Если нет обратного вызова существует, искать старого образца single_text и multiple_text аргументы
$translate_nooped_plural = _n_noop( $args['single_text'], $args['multiple_text'] );
} else {
// Это по умолчанию, когда нет обратного вызова, во множественном числе, или аргумент не передается
$translate_nooped_plural = _n_noop( '%s topic', '%s topics' );
}
// Фильтров как элементов в облаке тегов сортируются.
// @since 2.8.0
// @param array $tags Упорядоченный массив терминов
// @param array $args Массив тегов аргументы облака
$tags_sorted = apply_filters( 'tag2_cloud_sort', $tags, $args );
if ( empty( $tags_sorted ) ) {
return $return;
}

if ( $tags_sorted !== $tags ) {
$tags = $tags_sorted;
unset( $tags_sorted );
} else {
if ( 'RAND' === $args['order'] ) {
shuffle( $tags );
} else {
// SQL; это вариант (возможно, разных) на множестве данных...
if ( 'name' === $args['orderby'] ) {
uasort( $tags, '_wp_object_name_sort_cb' );
} else {
uasort( $tags, '_wp_object_count_sort_cb' );
}

if ( 'DESC' === $args['order'] ) {
$tags = array_reverse( $tags, true );
}
}
}

if ( $args['number'] > 0 )
$tags = array_slice( $tags, 0, $args['number'] );

$counts = array();
$real_counts = array(); // For the alt tag
foreach ( (array) $tags as $key => $tag ) {
$real_counts[ $key ] = $tag->count;
$counts[ $key ] = call_user_func( $args['topic_count_scale_callback'], $tag->count );
}

$min_count = min( $counts );
$spread = max( $counts ) - $min_count;
if ( $spread <= 0 )
$spread = 1;
$font_spread = $args['largest'] - $args['smallest'];
if ( $font_spread < 0 )
$font_spread = 1;
$font_step = $font_spread / $spread;
// Собрать данные, которые будут использоваться для создания облака тегов разметки.
$tags_data = array();
foreach ( $tags as $key => $tag ) {
$tag_id = isset( $tag->id ) ? $tag->id : $key;

$count = $counts[ $key ];
$real_count = $real_counts[ $key ];

if ( $translate_nooped_plural ) {
$title = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) );
} else {
$title = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args );
}

$tags_data[] = array(
'id' => $tag_id,
'url' => '#' != $tag->link ? $tag->link : '#',
'role' => '#' != $tag->link ? '' : ' role="button"',
'name' => $tag->name,
'title' => $title,
'slug' => $tag->slug,
'real_count' => $real_count,
'class' => 'tag-link-' . $tag_id,
'font_size' => $args['smallest'] + ( $count - $min_count ) * $font_step,
);
}
// Фильтрует данные, используемые для генерации облака тегов
// @since 4.3.0
// @param array $tags_data Массив данных для термин, используемый для генерации облака тегов
$tags_data = apply_filters( 'wp_generate_tag2_cloud_data', $tags_data );

$a = array();
// генерируют выходной массив ссылок
foreach ( $tags_data as $key => $tag_data ) {
// открыть если добавлять класс увеличения шрифта $class = $tag_data['class'] . ' tag-link-position-' . ( $key + 1 );
// убрал class='" . esc_attr( $class ) . "' прописывается между кавычек " ...ТУТ... title ... // class='" . esc_attr( $tag_id ) . "'
// убрал style='font-size: " . esc_attr( str_replace( ',', '.', $tag_data['font_size'] ) . $args['unit'] ) . ";'
// ПОЛНАЯ СТРОКА $a[] = "<a href='" . esc_url( $tag_data['url'] ) . "'" . $tag_data['role'] . " class='" . esc_attr( $class ) . "' title='" . esc_attr( $tag_data['title'] ) . "' style='font-size: " . esc_attr( str_replace( ',', '.', $tag_data['font_size'] ) . $args['unit'] ) . ";'>" . esc_html( $tag_data['name'] ) . "</a>";
$a[] = "<span class='external-reference2' data-link='" . esc_url( $tag_data['url'] ) . "'" . $tag_data['role'] . " title='" . esc_attr( $tag_data['title'] ) . "' >" . esc_html( $tag_data['name'] ) . "</span>";
}

switch ( $args['format'] ) {
case 'array' :
$return =& $a;
break;
case 'list' :
$return = "<ul class='wp-tag2-cloud'>\n\t<li>";
$return .= join( "</li>\n\t<li>", $a );
$return .= "</li>\n</ul>\n";
break;
default :
$return = join( $args['separator'], $a );
break;
}

if ( $args['filter'] ) {
// Фильтры для вывода облака тегов
// Фильтр оценивается только если передается значение True
// to the $filter argument in wp_generate_tag_cloud().
//
// @since 2.3.0
//
// @see wp_generate_tag_cloud()
//
// @param array|string $return Строка, содержащая сгенерированный HTML-тег вывода облака
// or an array of tag links if the 'format' argument
// equals 'array'.
// @param array $tags Массив терминов, используемых в облако тегов
// @param array $args Массив wp_generate_tag_cloud() аргументы
return apply_filters( 'wp_generate_tag2_cloud', $return, $tags, $args );
}
else
return $return;
}
/*** ФИНАЛ - ГЕНЕРАТОР ФУНКЦИИ ТЕГОВ ИЗ ЯДРА WP /wp-includes/category-template.php ***/

 

 

 

Далее — завершение…

Если вы использовали стандартный виджет Облака меток, то его следует отключить, но вместо него поставить текстовую вариацию виджета — текстовой виджет.

 

В текстовом виджете пропишем следующую строку — вызов функции отработки ссылок тегов-меток…

 

 

 

дополнение…

Внимание !! в связи с обновлением ядра Вордпресс до версии 4.8 — работать «отработкой» php функций в текстовом варианте виджета стало проблематично: функции вероломно пропадают !! Всё дело в том, что, в новый текстовый виджет добавлены текстовые же редакторы (TinyMCE — визуальный и html) — эти редакторы, как известно, срезают php код!

Как этого избежать: дело просто — возможно вернуть прошлый вариант текстового виджета (тот, который был до обновления WP — без текстовых редакторов), подробно описано в этой статье.

 

 

 

 

…продолжим:

 

 

<div class="tagcloud"><?php wp_tag2_cloud (); ?></div>

 

 

Сохраняем и смотрим на результат проделанной работы.

 

У тех админов, у которых на сайте ещё не была прикручена обработка ajax и пр. ссылки меток будут неактивны: облако в сайдбаре появится, имена меток тоже… а вот перейти по link куда надо) будет труднёхонько!

 

 

Вероятно, кому-то предстоит поправить и стили css селектора .tagcloud в файле стилей style.css своей темы.

А также важно !! добавить css условия и значения ссылок закрытых ajax .external-reference — чтобы придать, обычный визуальный эффект ссылке закрытой ajax: иначе линк в тексте будет незаметен — нерабочий! — пройдите по якорной ссылке…

В этой статье не буду приводить примеры css, дабы не повторяться…

 

 

 

 

закроем ссылки тегов в сайдбаре — плагин закрытых меток tagATs

 

 

 

 

После установки плагина (или прописки кода в шаблон) — в исходном коде страницы ссылки тегов будут выглядеть примерно так:

 

 

<link rel='stylesheet' id='atstags-style-css' href='https://домен.ru/wp-content/plugins/tagATs/atstags-style.css' type='text/css' media='all' />

 

 

…это в шапке сайта, — если вы не перенесёте стили ПЛАГИНА в активный файл стилей css style.css своего шаблона.

А коли перенесёте, то этой ссылки не будет):

 

 

…а так будут выглядеть ссылки в HTML странице в разделе сайдбара, ну, или там… где будете выводить облако:

 

 

<div class="widgettitle">облако меток</div>
<div class="textwidget"><div class="tagcloud">
<span class='external-reference2' data-link='http://testssays.complitra.ru/tag/proba/' title='1 запись' >проба</span>
<span class='external-reference2' data-link='http://testssays.complitra.ru/tag/tozhe-ochen-zdorovskaya/' title='1 запись' >тоже очень здоровская</span>
</div></div>

 

 

 

Как видите никаких дублей class ! — в нашем варианте попросту id тега убран из ссылки.

 

 

После установки и активации плагина tagATs не лишне проверить свою работу на валидаторах… а также справиться и убедиться в том, что ссылок на странички тегов (меток) больше нет: дублей нет!

 

html валидатор: https://validator.w3.org/

 

…и невидимость ссылок, например, можно проследить здесь: http://mainspy.ru/analiz_ssylok_sajta

 

 

 

 

В качестве эпилога к описанию плагина закрытых меток

 

 

 

ещё один небольшой штрих в правках:

 

 

Тем админам, у которых странички всяких категорий, меток — архивов ещё не закрыты

 

<meta name="robots" content="noindex,nofollow" />

 

…целесообразно их закрыть… что также здорово исключит всякие дубли /сопли/!! и закрыть не в файле robots.txt как это многие делают — и зря ! с недавних пор некоторые строки в этом текстовом фале в принципе бессмысленны!

 

…как закрывать страницы noindex,nofollow более правильно — описано ТУТ.

 

 

В этой серии 0.7 плагина я специально не стал автоматически подключать библиотеку jquery js — ибо у многих она уже подключена — дублировать не нужно !!

А посему я посчитал, что — правильнее будет предоставить выбор админу.

Так что, коли у кого-то возникнут трудности использования (либо тонкой подстройки плагина) — смело обращайтесь — всё что нужно дополню и поправлю.

 

 

Ну а для тех, которые пока что затрудняются с правкой кода своего шаблона — можно воспользоваться этой ссылкой, — пройти по ней и замечательным образом скачать плагин закрытых меток — tagATs и установить себе.

Плагин лёгкий… не делает никаких записей в Базе Данных… ( при необходимости легко удаляется) —

…и ни на каких скоростях загрузки страничек сайта установка плагина не отразится.

 

Полная проверка рабочего состояние плагина с WP 4.8 и ниже!

 

 

 


На этом занавес представления опускается…
…на рампы пыль печальная ложится…


...город веб мастеров Михалика.ru - запросто с WordPress

 

 

Подписаться на life-News студии занимательная Михалика
SendPulse - NoSpamX || Михалика ©

 


!..подписываясь на обновления mihalica.ru
...расстаёмся с невежеством..!



Благодарности)) и вопросы в комментариях - помогу… в чём дюжу
А также Вы можете просто:
Нажатия на кнопочки определяют Ваше высокое гражданское сознание
ещё статьи по теме:

меточная навигация:


Комментарии © 0 к статье: Как закрыть ссылки меток в сайдбаре — jquery js аякс — или плагин закрытых меток tagATs…

Поделитесь соображениями: Ваши мысли очень важны! $ правила комментирования ©

Внимание! Обязательные поля помечены *

 для диалога необходимо принять правила кофиденциальности *
Яндекс.Метрика