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 .= "$args[title] 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]$th_or_td_left>n";
if ( $is_split_view ) {
$r .= "t<$th_or_td_right>$args[title_right]$th_or_td_right>n";
}
$r .= " n";
}
if ( $args['title_left'] || $args['title_right'] ) {
$r .= "n";
}
$r .= "n$diffnn";
$r .= '
';
return $r;
}