Те, которые как-то обращают внимание на функционал комментирования WordPress, наверняка задавались вопросом, когда обнаруживали в комментариях, если имеется ссылка на сторонний ресурс, что к ссылке добавляется атрибутика rel=«nofollow ugc». Также, вероятно, некоторые и админов задаются вопросом, как убрать либо изменить данную атрибутику?..
…ну, например, не во всех комментариях, а в каком-то конкретном?..
За этот функционал отвечает фильтрация текста функцией wp_rel_ugc( $text ). Однако сегодня потолкуем поподробнее относительно её работы по форме комментирования… и том, как отключать сие автоматическое добавления атрибутов в комментариях, — это ж иногда требуется…
Функция comment_form() — выводит форму комментирования (функционал)…
или можно почитать здесь.
выводим комменты там, где нам требуется
Сама функция: wp_rel_ugc( $text )
Функция wp_rel_ugc( $text) была добавлена с версии ядра WordPress 5.3 — если используется в обработке некоего текста — фильтрует его, к примеру, при добавлении комментария к посту (сегодня говорим же о форме комментирования!).
расположение и отработка функции wp_rel_ugc( $text )
В ядре WP (на данный момент во всяком случае) расположена в wp-includes/formatting.php Почитать можно и в Кодексе WordPress…
/**
* Adds `rel="nofollow ugc"` string to all HTML A elements in content.
*
* @since 5.3.0
*
* @param string $text Content that may contain HTML A elements.
* @return string Converted content.
*/
function wp_rel_ugc( $text ) {
// This is a pre-save filter, so text is already escaped = Это фильтр предварительного сохранения, поэтому текст уже экранирован
$text = stripslashes( $text );
$text = preg_replace_callback(
'|<a (.+?)>|i',
static function ( $matches ) {
return wp_rel_callback( $matches, 'nofollow ugc' );
},
$text
);
return wp_slash( $text );
}
Что интересно;
- текст фильтруется (т.е. добавляется атрибут к html ссылке) перед тем, как сам текст комментария будет добавлен в базу данных (именно в Базе Данных и хранятся комментарии, и уже с добавленным атрибутом
rel=«nofollow ugc», но без экранных слешей «\», что весьма логично!). - все прежние комментарии по сайту (если он построен на версиях до 5.3) изменены не будут до момента их редактирования!
Итак: в нашем случае функция организует автоматическое добавление атрибутов nofollow ugc в ссылки в комментариях.
значение «ugc» (аб. англ. User Generated Content) — директива по организации пользовательских ссылок сайта: например, ссылок в комментариях.
если вы доверяете ресурсу по ссылке, то применение атрибута не обязательно.
$text — (строка) любой текст, который содержит или не содержит ссылки.
работает примерно так: echo stripslashes( wp_rel_ugc( $text ) );
stripslashes() используют, если в обработке текстовых данных (фильтрации) не требуется экранирование (обратные слеши)…
примечание:
- внутренние ссылки по сайту (домен сайта) — атрибутика rel не добавляется;
- в остальных ссылках: если html линка rel и какое-то значение уже имеет — все это останется не тронутым;
- если в атрибуте имеется только одно из значений либо nofollow либо ugc — то будет добавлено недостающее (скорее всего порядок значений значений может отличаться от примера в статье).
Если требуется отключить функционал автоматического добавления rel="nofollow ugc" (например, в текстах комментариев) следует воспользоваться фильтром remove_filter(), где-то в файле functions.php
как отключить функционал добавления rel=«nofollow ugc» в ядре WP 5.3 и выше
Если вы получили комментарий и перешли к его модерации в адмике сайта, увидите примерно следующее:

Если банально стереть атрибуты — и обновить комментарий (т.е. перезаписать в Базе Данных), то эти атрибуты будут вновь к ссылке добавлены!
Чтобы добавить к ссылке какие-то свои атрибуты, либо вовсе убрать их, следует воспользоваться фильтром (этот фильтр только по комментариям)!
remove_filter( 'pre_comment_content', 'wp_rel_ugc', 15 ); // 15 (приоритет); pre_comment_content - обработка текстовых данных комментариев
- pre_comment_content — фильтр php по WordPress: полезен для разработчиков потому что позволяет изменять содержание (html — текст) комментариев перед тем, как данные будут сохранены в базе данных.
вывод
Самые простые варианты:
Если требуется оставить ссылку со своими атрибутами, или вовсе без них (открытую ссылку), то следует воспользоваться фильтром в момент всякого обновления (редактирования) комментария — то есть при сохранении текста в Б.Д!! это может быть несколько неудобно… т.к. придется включать фильтр при любом случае редактирования данных какого-то конкретного комментария, если уникальная атрибутика требуется только в нем.
Или включить фильтр на постоянной основе, чтобы ничего не добавлялось к ссылкам. А уже по требованию снабжать линк необходимым, что называется вручную…
Если вам требуется организовать управление атрибутикой ссылок более утонченно (в комментариях, или где-то как-то), пишите, будем решать вопрос…



