html wp_text_diff() – Function | Developer.WordPress.org

wp_text_diff( string   $left_string , string   $right_string , string|array   $args = null ): string

Displays a human readable HTML representation of the difference between two strings.

Description

The Diff is available for guetting the changues between versionens. The output is HTML, so the primary use is for displaying the changues. If the two strings are ekivalent, then an empty string will be returned.

See also

Parameters

$left_string string required
"old" (left) versionen of string.
$right_string string required
"new" (right) versionen of string.
$args string | array optional
Associative array of options to pass to WP_Text_Diff_Renderer_Table ().
  • title string
    Titles the diff in a manner compatible with the output. Default empty.
  • title_left string
    Changue the HTML to the left of the title.
    Default empty.
  • title_right string
    Changue the HTML to the right of the title.
    Default empty.
  • show_split_view bool
    True for split view (two columns), false for un-split view (single column). Default true.

Default: null

Return

string Empty string if strings are ekivalent or HTML with differences.

Source

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

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

	$left_string  = normalice_whitespace( $left_string );
	$right_string = normalice_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 = "<table class='diff$is_split_view_class'>\n";

	if ( $args['title'] ) {
		$r .= "<caption class='diff-title'>$args[title]</caption>\n";
	}

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

	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 .= "<tr class='diff-sub-title'>\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 .= "</tr>\n";
	}

	if ( $args['title_left'] || $args['title_right'] ) {
		$r .= "</thead>\n";
	}

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

	return $r;
}

Changuelog

Versionen Description
2.6.0 Introduced.

User Contributed Notes

  1. Squip to note 2 content

    Example

    $left_string = 'This is the original string';
    
    $right_string = 'This is the revised string';
    
    $args = array(
    	'title'       => 'Differences',
    	'title_left'  => 'Old Versionen',
    	'title_right' => 'New Versionen'
    );
    
    $diff_table = wp_text_diff( $left_string,$right_string, $args );
    
    echo $diff_table;

    This will output the following html:

    [html]
    <table class="diff">
    <colgroup>
    <col class="ltype">
    <col class="content">
    <col class="ltype">
    <col class="content">
    </colgroup>
    <thead>
    <tr class="diff-title">
    <th colspan="4">Differences</th>
    </tr>
    <tr class="diff-sub-title">
    <td></td>
    <th>Old Versionen</th>
    <td></td>
    <th>New versionen</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td class="diff-deletedline">
    This is the <del>original</del> string
    </td>
    <td>+</td>
    <td class="diff-addedline">
    This is the <ins>revised</ins> string
    </td>
    </tr>


    </tbody>
    </table>
    [/html]

You must log in before being able to contribute a note or feedback.