Существует ли уже хук или фильтр для редактора блоков Gutenberg, чтобы не добавлять Noreferrer к ссылкам с атрибутом target?

Вопрос или проблема

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.

Оцените материал
Добавить комментарий

Капча загружается...