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

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

Description Description

The Diff is available for getting the changes between versions. The output is HTML, so the primary use is for displaying the changes. If the two strings are equivalent, then an empty string will be returned.

The arguments supported and can be changed are listed below.

‘title’ : Default is an empty string. Titles the diff in a manner compatible with the output. ‘title_left’ : Default is an empty string. Change the HTML to the left of the title. ‘title_right’ : Default is an empty string. Change the HTML to the right of the title.

See also See also

Top ↑

Parameters Parameters


(string) (Required) "old" (left) version of string


(string) (Required) "new" (right) version of string


(string|array) (Optional) Change 'title', 'title_left', and 'title_right' defaults.

Default value: null

Top ↑

Return Return

(string) Empty string if strings are equivalent or HTML with differences.

Top ↑

Source Source

File: wp-includes/pluggable.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;

Top ↑

Changelog Changelog

Version Description
2.6.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note content
    Contributed by Codex


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

    This will output the following html:

    <table class="diff">
    		<col class="ltype">
    		<col class="content">
    		<col class="ltype">
    		<col class="content">
    		<tr class="diff-title">
    			<th colspan="4">Differences</th>
    		<tr class="diff-sub-title">
    			<th>Old Version</th>
    			<th>New version</th>
    			<td class="diff-deletedline">
    				This is the <del>original</del> string
    			<td class="diff-addedline">
    				This is the <ins>revised</ins> string

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