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' );
→ Ссылка