WP_Text_Diff_Renderer_Table
Table-based renderer for displaying diff output in a two-column HTML table format.
Source: wp-includes/class-wp-text-diff-renderer-table.php
Since: 2.6.0
Extends: Text_Diff_Renderer
Properties
Public Properties
| Property | Type | Default | Description |
|---|---|---|---|
$_leading_context_lines | int | 10000 | Lines of context before changes |
$_trailing_context_lines | int | 10000 | Lines of context after changes |
$_title | string|null | null | Title of compared item |
$_title_left | string|null | null | Left column title |
$_title_right | string|null | null | Right column title |
Protected Properties
| Property | Type | Default | Description |
|---|---|---|---|
$_diff_threshold | float | 0.6 | Max difference ratio for word-level diffs |
$inline_diff_renderer | string | 'WP_Text_Diff_Renderer_inline' | Class for inline word diffs |
$_show_split_view | bool | true | Enable two-column layout |
$compat_fields | array | [...] | Fields exposed via magic methods |
$count_cache | array | [] | Character count cache |
$difference_cache | array | [] | String distance cache |
Methods
__construct()
Creates a new table renderer with optional configuration.
public function __construct( array $params = array() )| Parameter | Type | Description |
|---|---|---|
$params | array | Configuration options |
Params:
| Key | Type | Description |
|---|---|---|
show_split_view | bool | Enable two-column layout |
render()
Renders the diff as HTML table rows. Inherited from Text_Diff_Renderer.
public function render( Text_Diff $diff ): string| Parameter | Type | Description |
|---|---|---|
$diff | Text_Diff | Diff object to render |
Returns: HTML string of table rows (<tr> elements).
addedLine()
Generates HTML for an added line cell.
public function addedLine( string $line ): string| Parameter | Type | Description |
|---|---|---|
$line | string | HTML-escaped line content |
Returns: <td class='diff-addedline'>...</td> with plus icon and screen reader text.
deletedLine()
Generates HTML for a deleted line cell.
public function deletedLine( string $line ): string| Parameter | Type | Description |
|---|---|---|
$line | string | HTML-escaped line content |
Returns: <td class='diff-deletedline'>...</td> with minus icon and screen reader text.
contextLine()
Generates HTML for an unchanged context line cell.
public function contextLine( string $line ): string| Parameter | Type | Description |
|---|---|---|
$line | string | HTML-escaped line content |
Returns: <td class='diff-context'>...</td> with screen reader text.
emptyLine()
Generates HTML for an empty placeholder cell.
public function emptyLine(): stringReturns: <td> </td>
_added()
Renders added lines with optional encoding.
public function _added( array $lines, bool $encode = true ): string| Parameter | Type | Description |
|---|---|---|
$lines | array | Lines that were added |
$encode | bool | Whether to HTML-encode content |
Returns: HTML rows for added content.
Applies Filter: process_text_diff_html with context 'added'
_deleted()
Renders deleted lines with optional encoding.
public function _deleted( array $lines, bool $encode = true ): string| Parameter | Type | Description |
|---|---|---|
$lines | array | Lines that were deleted |
$encode | bool | Whether to HTML-encode content |
Returns: HTML rows for deleted content.
Applies Filter: process_text_diff_html with context 'deleted'
_context()
Renders unchanged context lines with optional encoding.
public function _context( array $lines, bool $encode = true ): string| Parameter | Type | Description |
|---|---|---|
$lines | array | Unchanged lines |
$encode | bool | Whether to HTML-encode content |
Returns: HTML rows for context (duplicated in both columns for split view).
Applies Filter: process_text_diff_html with context 'unchanged'
_changed()
Processes changed lines with word-level diff highlighting.
public function _changed( array $orig, array $final ): string| Parameter | Type | Description |
|---|---|---|
$orig | array | Original lines |
$final | array | Final/modified lines |
Returns: HTML rows with <ins> and <del> tags for word-level changes.
Algorithm:
- Interleave lines to match similar content
- Compute word-level diffs using inline renderer
- Apply threshold check (skip highlighting if too different)
- Render side-by-side or stacked based on view mode
interleave_changed_lines()
Matches original and final lines to align similar content.
public function interleave_changed_lines( array $orig, array $final ): array| Parameter | Type | Description |
|---|---|---|
$orig | array | Original lines |
$final | array | Final lines |
Returns: Array with four elements:
| Index | Key | Description |
|---|---|---|
| 0 | $orig_matches | Map of orig index → final index (or ‘x’ for deleted) |
| 1 | $final_matches | Map of final index → orig index (or ‘x’ for added) |
| 2 | $orig_rows | Interleaved row indices with blanks (-1) |
| 3 | $final_rows | Interleaved row indices with blanks (-1) |
compute_string_distance()
Computes a distance metric between two strings.
public function compute_string_distance( string $string1, string $string2 ): int| Parameter | Type | Description |
|---|---|---|
$string1 | string | First string |
$string2 | string | Second string |
Returns: Distance score (lower = more similar). Based on L1-norm of character frequency difference.
Uses caching for performance with $count_cache and $difference_cache.
difference()
Computes absolute difference between two values.
public function difference( int $a, int $b ): intUsed internally by compute_string_distance().
Magic Methods
For backward compatibility, protected properties are accessible via magic methods:
| Method | Purpose |
|---|---|
__get() | Read protected properties |
__set() | Write protected properties |
__isset() | Check if property is set |
__unset() | Unset a property |
Deprecated since 6.4.0 — Accessing undefined dynamic properties triggers deprecation notice.
Diff Threshold
The $_diff_threshold (default 0.6) controls when word-level highlighting is shown:
// If more than 60% of content changed, skip word highlighting
if ( $diff_ratio > $this->_diff_threshold ) {
continue; // Show as plain deleted/added without <ins>/<del>
}This prevents confusing output when lines are completely rewritten.
Split vs. Single View
Split view (default):
<tr>
<td class="diff-deletedline">old content</td>
<td class="diff-addedline">new content</td>
</tr>Single column view:
<tr>
<td class="diff-deletedline">old content</td>
</tr>
<tr>
<td class="diff-addedline">new content</td>
</tr>Extending
class My_Diff_Renderer extends WP_Text_Diff_Renderer_Table {
// Lower threshold for more word-level diffs
protected $_diff_threshold = 0.8;
// Custom added line styling
public function addedLine( $line ) {
return "<td class='my-added'>{$line}</td>";
}
}
// Use custom renderer
$renderer = new My_Diff_Renderer();
$output = $renderer->render( $text_diff );