WordPress. Неправильно отображаются ссылки на мессенджеры
В админке выведены поля, куда можно вставлять свои ссылки на мессенджеры.
Если написать tg://resolve?domain= , то на странице будет https://resolve/?domain=. Так и в вайбере. Как с этим бороться?
Ответы (1 шт):
Автор решения: KAGG Design
→ Ссылка
Так происходит потому, что при выводе на экран ссылки очищаются функцией esc_url(), это нужно для обеспечения безопасности. В этой функции запрашиваются разрешённые протоколы, установленные в wp_allowed_protocols(). По умолчанию, список разрешённых протоколов такой:
$protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'irc6', 'ircs', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'sms', 'svn', 'tel', 'fax', 'xmpp', 'webcal', 'urn' );
Как и везде в WordPress, в данной функции есть фильтр, с помощью которго можно изменить список разрешённых протоколов. Добавьте в functions.php вашей темы такой код:
/**
* Filters the list of protocols allowed in HTML attributes.
*
* @param array $protocols Allowed protocols.
*
* @return array
*/
function my_kses_allowed_protocols( $protocols ) {
return array_merge( $protocols, [ 'tg', 'viber' ] );
}
add_filter( 'kses_allowed_protocols', 'my_kses_allowed_protocols' );