Tworzysz stronę internetową i potrzebujesz pomocy?

Zapytała mnie koleżanka, dlaczego u mnie we wpisach „mordki” (np. ;-)) widać jako zwykłe połączenie znaków, a nie jak u niej – w formie graficznego Emoji. Moja odpowiedź była prosta – bo mam tak ustawione w ustawieniach WordPressa. I choć była to jak najbardziej prawdziwa odpowiedź, to… dotyczy tylko stron, które zostały uruchomione na starszych wersjach WordPressa. W przypadku nowszych instalacji takiej opcji nie ma, i trzeba zastosować inne metody by wyłączyć Emoji…

Wyłączenie Emoji w WordPress

WordPress na którym działa Webinsider.pl działa od bardzo dawna, i choć w międzyczasie przeszedł sporo zmian (i aktualizacji), to niektóre elementy wyglądają tak a nie inaczej właśnie ze względu na staż.

I tak np. w ustawieniach (ustawienia -> pisanie) mam opcję pozwalającą mi włączyć lub wyłączyć obsługę Emoji:

Konwertuj emotikony, takie jak :-) i :-P, na obrazki podczas ich wyświetlania

Tej opcji nie ma (przynajmniej teoretycznie) w WordPressach, które zostały uruchomione relatywnie niedawno:

Napisałem, że przynajmniej teoretycznie, bo gdy zajrzymy do pliku:

/wp-admin/options-writting.php

widać tam taki kod:

<?php if ( get_site_option( 'initial_db_version' ) < 32453 ) : ?>
<tr>
<th scope="row"><?php _e('Formatting') ?></th>
<td><fieldset><legend class="screen-reader-text"><span><?php _e('Formatting') ?></span></legend>
<label for="use_smilies">
<input name="use_smilies" type="checkbox" id="use_smilies" value="1" <?php checked('1', get_option('use_smilies')); ?> />
<?php _e('Convert emoticons like <code>:-)</code> and <code>:-P</code> to graphics on display') ?></label><br />
<label for="use_balanceTags"><input name="use_balanceTags" type="checkbox" id="use_balanceTags" value="1" <?php checked('1', get_option('use_balanceTags')); ?> /> <?php _e('WordPress should correct invalidly nested XHTML automatically') ?></label>
</fieldset></td>
</tr>
<?php endif; ?>

Jest tutaj warunek (if), który sprawdza parametr „initial_db_version”, i jeśli jest on mniejszy niż „32453”, to wspomniane opcje są wyświetlane. W innym przypadku ich nie ma. Tak więc by przywrócić opcję zarządzania konwersją ;-) na Emoji wystarczy zmienić ten parametr, co regularnie robię od dawna na wielu stronach.

Najprościej dokonać podmiany wartości parametru „initial_db_version” korzystając z „dużych ustawień” WordPressa, do których można się dostać np. za pomocą adresu URL:

https://[ADRES-STRONY]/wp-admin/options.php

Tam, wśród naprawdę dużej liczby opcji znajdziemy też możliwość zmiany wartości dla initial_db_version”:

Zmiany można też dokonać np. z poziomu phpMyAdmin (dostępny chyba w każdym hostingu), za pomocą np. takiego zapytania SQL:

UPDATE `nazwa_bazy_danych`.`wp_options` SET `option_value` = '18226' WHERE `wp_options`.`option_name` = 'initial_db_version';

Można też dodać kod np. do pliku functions.php (przypominam o motywach potomnych ;-)), który sprawdzi jaką mamy wartość zapisaną w bazie danych, i w razie potrzeby dokona modyfikacji:

add_action( 'init', 'webinsider_wp_initial_db_version' );
function webinsider_wp_initial_db_version() {
	if ( get_site_option( 'initial_db_version' ) >= 32453 ) {
		update_option( 'initial_db_version', '18226' );
	}
}

Po wprowadzeniu kodu wystarczy odświeżyć stronę by zmiana została wprowadzona. Po tej operacji najlepiej go usunąć – choć nie będzie przeszkadzał, to jest (już) zbyteczny. W ustawieniach WordPressa (ustawienia -> pisanie) powinna pojawić się odpowiednia opcja:

Jest to wersja którą ja preferuje, bo daje użytkownikowi (z odpowiednimi uprawnieniami) możliwość samodzielnego zarządzania czy chce konwertować emotikony, takie jak :-) i :-P, na obrazki podczas ich wyświetlania, czy nie.

Natomiast można wyłączyć obsługę Emoji permanentnie (do usunięcia kodu ;-)) dodając/modyfikując odpowiednie filtry, np. za pomocą kodu w pliku functions.php (ponownie przypominam o motywach potomnych ;-)):

add_filter( 'option_use_smilies', '__return_false' );
add_filter( 'emoji_svg_url', '__return_false' );

Ew. w wersji „bardziej kompleksowej”:

function disable_emojis() {
	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
	remove_action( 'wp_print_styles', 'print_emoji_styles' );
	remove_action( 'admin_print_styles', 'print_emoji_styles' );	
	remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
	remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );	
	remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
	add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
	add_filter( 'wp_resource_hints', 'disable_emojis_remove_dns_prefetch', 10, 2 );
}
add_action( 'init', 'disable_emojis' );

Oczywiście wszystkie powyższe zmiany mają sens tylko wtedy, gdy – tak jak ja – w tekstach na stronie wolicie piękne :-) zamiast kolorowych Emoji… ;-)

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)
Patryk
Kurs "WordPress: Pierwsze kroki" (na dobry początek)