Вопрос или проблема
WordPress добавляет “noreferrer” ко всем ссылкам, которые открываются в новой вкладке. Это началось еще до появления Gutenberg, и был предоставлен фильтр TinyMCE для исправления этой проблемы. В Gutenberg это больше не работает. У них также есть новый фильтр wp_targeted_link_rel, который работает только для классического редактора.
Я вручную удалил это из всех своих ссылок, и все было в порядке на WP 5.0. После обновления до WP 5.1 “noreferrer” снова был добавлен ко всем моим ссылкам после обновления постов. Это настоящий кошмар.
Причина удаления связана с отслеживанием исходного домена с помощью партнерских сетей. Даже те, кто использует идентификаторы партнеров в качестве URL-параметров, все равно требуют, чтобы реферер был одобренным доменом.
Кто-нибудь уже нашел способ остановить это в Gutenberg?
Для тех, кто видит этот пост, я уверен, вы уже в курсе, что noreferrer добавляется как исправление безопасности для браузеров IE и Edge, а также некоторых других, которые не поддерживают исправление безопасности rel=”noopener” для ссылок, открываемых в новой вкладке.
Чтобы удалить noreferrer, это все еще требует preg_replace. Я добавил это в functions.php (сначала создав резервную копию).
//Этот код удаляет noreferrer из ваших новых или обновленных постов
add_filter( 'wp_targeted_link_rel', 'my_targeted_link_rel_remove_noreferrer');
function my_targeted_link_rel_remove_noreferrer( $rel_values ) {
return preg_replace( '/noreferrer\s*/i', '', $rel_values );
}
В первый раз, когда я тестировал, мне пришлось добавить приоритет к вызову фильтра (код ниже), чтобы это заработало, не уверен, что “999” действительно был необходим, но сейчас, когда я тестирую, кажется, что это работает и без него.
//Этот код удаляет noreferrer из ваших новых или обновленных постов
add_filter( 'wp_targeted_link_rel', 'my_targeted_link_rel_remove_noreferrer', 999);
function my_targeted_link_rel_remove_noreferrer( $rel_values ) {
return preg_replace( '/noreferrer\s*/i', '', $rel_values );
}
Вот ссылка на полный пост.
https://wpbloggerassist.com/remove-noreferrer-in-gutenberg-from-the-latest-wordpress-update/
Редактируя, добавляю, что нашел другой код здесь:
// из: https://tinygod.pt/gutenberg-adds-noopener-noreferrer-to-links/
function my_links_control( $rel, $link ) {
return false;
}
add_filter( ‘wp_targeted_link_rel’, ‘my_links_control’, 10, 2 );
ПРИМЕЧАНИЕ: Это не удаляет существующие ссылки с “noreferrer”, вам все равно нужно пройти по постам, удалить текст “noreferrer” и обновить.
Этот третий код не будет автоматически добавлять никакие атрибуты rel. Так что вам нужно вручную добавить rel=”noopener”.
Ответ или решение
Да, существует способ убрать автоматическое добавление noreferrer
из ссылок в редакторе Gutenberg, используя фильтры WordPress. Как вы уже упомянули, начиная с версии WordPress 5.0, система добавляет атрибут noreferrer
ко всем ссылкам, которые открываются в новой вкладке, как средство безопасности. Однако, многие пользователи, особенно те, кто работает с аффилированными сетями, сталкиваются с проблемами из-за этого автоматического добавления.
Для решения этой проблемы вы можете воспользоваться следующим кодом, который можно добавить в файл functions.php
вашей темы:
// Этот код удаляет noreferrer из ваших новых или обновленных записей
add_filter( 'wp_targeted_link_rel', 'my_targeted_link_rel_remove_noreferrer');
function my_targeted_link_rel_remove_noreferrer( $rel_values ) {
return preg_replace( '/noreferrer\s*/i', '', $rel_values );
}
Этот фильтр будет искать и удалять noreferrer
из значений атрибута rel
когда ссылка открывается в новой вкладке. Если у вас возникли проблемы с его работой, попробуйте добавить приоритет:
// Этот код удаляет noreferrer из ваших новых или обновленных записей
add_filter( 'wp_targeted_link_rel', 'my_targeted_link_rel_remove_noreferrer', 999);
function my_targeted_link_rel_remove_noreferrer( $rel_values ) {
return preg_replace( '/noreferrer\s*/i', '', $rel_values );
}
Вы также можете использовать альтернативный код, который полностью отключает добавление любых атрибутов rel
к ссылкам:
function my_links_control( $rel, $link ) {
return false;
}
add_filter( 'wp_targeted_link_rel', 'my_links_control', 10, 2 );
Однако, будьте осторожны: этот код не удаляет существующие noreferrer
атрибуты. Вам нужно вручную редактировать свои записи, чтобы удалить noreferrer
из уже существующих ссылок и обновить их.
Таким образом, вы сможете контролировать, какие атрибуты rel
добавляются к вашим ссылкам, и избежать проблем, связанных с отслеживанием реферера в аффилированных сетях. Обязательно протестируйте этот код в безопасной среде перед использованием на живом сайте, и не забудьте создать резервную копию вашего файла functions.php
.