Как использовать функцию WP_TEXT_DIFF() для сравнения текста в WordPress

WP_TEXT_DIFF() │ WP 2.6.0

Функция WP_TEXT_DIFF() помогает отобразить разницу между двумя строками текста в виде HTML. Она полезна для сравнения версий и показа изменений. Если строки одинаковые, функция вернёт пустую строку.

Плагины и замены функции

Эта функция является заменяемой (pluggable function), что значит, что её можно переопределить в плагинах. Однако использовать её можно только после загрузки вс��х плагинов (после события plugins_loaded). Чтобы вызвать её, используйте хуки plugins_loaded или init.

Замена функции

Если вы создадите функцию с тем же именем в вашем плагине, она заменит стандартную функцию.

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

Функция основана на других функциях:

  • Text_Diff()
  • WP_Text_Diff_Renderer_Table()

Возврат значения

Функция возвращает:

  • Строку с HTML-кодом, показывающим отличия.
  • Пустую строку, если строки идентичны.

Пример использования

Чтобы использовать функцию, вам нужно вызвать её следующим образом:

wp_text_diff( $left_string, $right_string, $args );

Аргументы функции

  • $left_string (строка, обязательный) — старая версия строки.
  • $right_string (строка, обязательный) — новая версия строки.
  • $args (строка|массив) — ассоциативный массив с параметрами для WP_Text_Diff_Renderer_Table() (по умолчанию null).

Опции $args:

  • title (строка) — заголовок разницы.

    • По умолчанию: ''
  • title_left (строка) — текст слева от заголовка.

    • По умолчанию: ''
  • title_right (строка) — текст справа от заголовка.

    • По умолчанию: ''
  • show_split_view (true|false) — если true, выводится в виде двух колонок; если false, то в одной колонке.

    • По умолчанию: true

Пример кода

Пример кода, сравнивающего два текста:

$string = 'Старый текст что-то больше';
$string2 = 'Новый текст больше.';

echo wp_text_diff( $string , $string2, array(
    'title'       => 'Различия',
    'title_left'  => 'Старый',
    'title_right' => 'Новый',
) );

Этот код выведет следующую таблицу:

Различия
Старый Новый
Старый текст что-то больше Новый текст больше..

Визуализация разницы

Результат будет выглядеть так (стили могут варьироваться в зависимости от вашей темы):

Различия       Старый         Новый
Старый текст что-то больше                  Новый текст больше.

Заметки

  • Функция wp_parse_args() используется для изменения значений по умолчанию на заданные пользователем настройки.

Изменения

Эта функция была введена в версии 2.6.0 и продолжает поддерживаться в новых версиях WordPress.

Исходный код функции

Вот как выглядит исходный код функции wp_text_diff:


function wp_text_diff( $left_string, $right_string, $args = null ) {
$defaults = array(
'title' => '',
'title_left' => '',
'title_right' => '',
'show_split_view' => true,
);
$args = wp_parse_args( $args, $defaults );

if ( ! class_exists( 'WP_Text_Diff_Renderer_Table', false ) ) { 
    require ABSPATH . WPINC . '/wp-diff.php'; 
} 

$left_string  = normalize_whitespace( $left_string ); 
$right_string = normalize_whitespace( $right_string ); 

$left_lines  = explode( "n", $left_string ); 
$right_lines = explode( "n", $right_string ); 
$text_diff   = new Text_Diff( $left_lines, $right_lines ); 
$renderer    = new WP_Text_Diff_Renderer_Table( $args ); 
$diff        = $renderer->render( $text_diff ); 

if ( ! $diff ) { 
    return ''; 
} 

$is_split_view       = ! empty( $args['show_split_view'] ); 
$is_split_view_class = $is_split_view ? ' is-split-view' : ''; 

$r = "n"; 

if ( $args['title'] ) { 
    $r .= "n"; 
} 

if ( $args['title_left'] || $args['title_right'] ) { 
    $r .= ''; 
} 

if ( $args['title_left'] || $args['title_right'] ) { 
    $th_or_td_left  = empty( $args['title_left'] ) ? 'td' : 'th'; 
    $th_or_td_right = empty( $args['title_right'] ) ? 'td' : 'th'; 

    $r .= "n"; 
    $r .= "t<$th_or_td_left>$args[title_left]n"; 
    if ( $is_split_view ) { 
        $r .= "t<$th_or_td_right>$args[title_right]n"; 
    } 
    $r .= "n"; 
} 

if ( $args['title_left'] || $args['title_right'] ) { 
    $r .= "n"; 
} 

$r .= "n$diffnn"; 
$r .= '
$args[title]
'; return $r;

}

Leave a Reply

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