Функция wp_staticize_emoji() в WordPress: преобразование эмодзи в изображения

# WP_STATICIZE_EMOJI() │ WP 4.2.0

Функция wp_staticize_emoji() предназначена для преобразования эмодзи в статические изображения.

**Использует:** wp_encode_emoji()  
**Время выполнения:** 1 раз — 0.000134 сек (быстро) | 50000 раз — 1.75 сек (быстро)

## Хуки из функции

- emoji_url
- emoji_ext

## Возвращаемое значение

Строка. Закодированный контент.

## Использование

```php
wp_staticize_emoji( $text );

Параметры

  • $text (string) (обязательный) — Контент, который нужно закодировать.

Примеры

Пример преобразования текста с эмодзи:

echo wp_staticize_emoji('text ✈');
// Выведет:
// text ✈

Изменения

Функция была введена в версии 4.2.0.

WP_STATICIZE_EMOJI() WP STATICIZE EMOJI CODE WP 6.7.2

Расположение в коде: wp-includes/formatting.php

function wp_staticize_emoji( $text ) {
    if ( ! str_contains( $text, '&#x' ) ) {
        if ( ( function_exists( 'mb_check_encoding' ) && mb_check_encoding( $text, 'ASCII' ) ) || ! preg_match( '/[^x00-x7F]/', $text ) ) {
            // Текст не содержит эмодзи, возвращаем его без изменений.
            return $text;
        } else {
            $encoded_text = wp_encode_emoji( $text );
            if ( $encoded_text === $text ) {
                return $encoded_text;
            }

            $text = $encoded_text;
        }
    }

    $emoji = _wp_emoji_list( 'entities' );

    // Подбираем эмодзи, которые потенциально могут быть в тексте.
    $possible_emoji = array();
    foreach ( $emoji as $emojum ) {
        if ( str_contains( $text, $emojum ) ) {
            $possible_emoji[ $emojum ] = html_entity_decode( $emojum );
        }
    }

    if ( ! $possible_emoji ) {
        return $text;
    }

    // URL для изображений эмодзи.
    $cdn_url = apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/15.0.3/72x72/' );

    // Расширение файлов изображений.
    $ext = apply_filters( 'emoji_ext', '.png' );

    $output = '';

    // Разбиваем текст на части.
    $textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE );
    $stop    = count( $textarr );

    // Игнорируем определенные теги.
    $tags_to_ignore       = 'code|pre|style|script|textarea';
    $ignore_block_element = '';

    for ( $i = 0; $i < $stop; $i++ ) {
        $content = $textarr[ $i ];

        // Если находимся в игнорируемом блоке, ждем закрывающий тег.
        if ( '' === $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) {
            $ignore_block_element = $matches[1];
        }

        // Если это не тег и не в игнорируемом блоке.
        if ( '' === $ignore_block_element && strlen( $content ) > 0 && '<' !== $content[0] && str_contains( $content, '&#x' ) ) {
            foreach ( $possible_emoji as $emojum => $emoji_char ) {
                if ( ! str_contains( $content, $emojum ) ) {
                    continue;
                }

                // Формируем имя файла для изображения.
                $file = str_replace( ';&#x', '-', $emojum );
                $file = str_replace( array( '&#x', ';' ), '', $file );

                // Создаем HTML для эмодзи.
                $entity = sprintf( '%s', $cdn_url . $file . $ext, $emoji_char );

                $content = str_replace( $emojum, $entity, $content );
            }
        }

        // Проверяем, вышли ли из игнорируемого блока.
        if ( '' !== $ignore_block_element && '' === $content ) {
            $ignore_block_element = '';
        }

        $output .= $content;
    }

    // Убираем лишние символы.
    $output = str_replace( '️', '', $output );

    return $output;
}

Связанные функции

  • EMOJI
  • wp_encode_emoji()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *