WordPress как на ладони
WordPress Meetup #4. Встречаемся в Москве wordpress jino

wp_text_diff() WP 2.6.0

Получает удобную для чтения HTML-таблицу с различиями между двумя переданными строками (текстами). Используется для сравнения изменений в ревизиях записи.

Если между строками нет различий, то wp_text_diff() вернет пустую строку. Возвращаемая таблица состоит из двух колонок: слева первый текст, справа второй. Удаленные и вставленные данные помечены тегами <del> и <ins>.

Так как функция возвращает HTML, она в первую очередь используется для визуального отображения различий между старым и новым текстом (например у редакций записи).

Это pluggable функция — т.е. её можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.

Замена функции (переопределение) — в плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Работает на основе: Text_Diff(), WP_Text_Diff_Renderer_Table()

Хуков нет.

Возвращает

Cтроку: HTML код таблицы, если в строках есть разница. Если разницы нет, вернет пустую строку.

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

wp_text_diff( $left_string, $right_string, $args );
$left_string(cтрока) (обязательный)
"Старый текст" (будет слева).
$right_string(cтрока) (обязательный)
"Новый текст" (будет справа).
$args(cтрока/массив)

Аргументы функции. Можно установить заголовки в таблице:
title - заголовок общей таблицы. По умолчанию - пусто.
title_left - заголовок левой колонки таблицы. По умолчанию - пусто.
title_right - заголовок правой колонки таблицы. По умолчанию - пусто.

По умолчанию: null

Примеры

#1 Демонстрация сравнивания текстов
$string  = 'Старый текст что-то еще';
$string2 = 'Новый текст еще.';

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

$diff = wp_text_diff( $string , $string2, $args );

echo $diff;

Этот код выведет следующее:

<table class='diff'>
	<col class='content' />
	<thead>
		<tr class='diff-title'>
			<th colspan='4'>Различия</th>
		</tr>
		<tr class='diff-sub-title'>
			<td></td>
			<th>Старый</th>
			<td></td>
			<th>Новый</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td class='diff-deletedline'><del>Старый</del> текст<del> что-то</del> еще </td>
			<td> </td>
			<td class='diff-addedline'><ins>Новый</ins> текст еще<ins>.</ins> </td>
		</tr>
	</tbody>
</table>

А выглядит так (зависит от css стилей вашей темы):

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

Код wp text diff: wp-includes/pluggable.php VER 4.9.7

<?php
function wp_text_diff( $left_string, $right_string, $args = null ) {
	$defaults = array( 'title' => '', 'title_left' => '', 'title_right' => '' );
	$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 '';

	$r  = "<table class='diff'>\n";

	if ( ! empty( $args[ 'show_split_view' ] ) ) {
		$r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />";
	} else {
		$r .= "<col class='content' />";
	}

	if ( $args['title'] || $args['title_left'] || $args['title_right'] )
		$r .= "<thead>";
	if ( $args['title'] )
		$r .= "<tr class='diff-title'><th colspan='4'>$args[title]</th></tr>\n";
	if ( $args['title_left'] || $args['title_right'] ) {
		$r .= "<tr class='diff-sub-title'>\n";
		$r .= "\t<td></td><th>$args[title_left]</th>\n";
		$r .= "\t<td></td><th>$args[title_right]</th>\n";
		$r .= "</tr>\n";
	}
	if ( $args['title'] || $args['title_left'] || $args['title_right'] )
		$r .= "</thead>\n";

	$r .= "<tbody>\n$diff\n</tbody>\n";
	$r .= "</table>";

	return $r;
}

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

Из метки: post revision (ревизии редакции записи)

Еще из раздела: Ревизии (редакции)

Danya 47
Программист фрилансер. Кодингом на PHP занимаю с 2008 года.
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться