wp_get_revision_ui_diff
Get the revision UI diff.
Description
Returns (array|bool)
Associative array of a post's revisioned fields and their diffs. Or, false on failure.
Parameters (3)
- 0. $post (object|int)
- The post object. Also accepts a post ID.
- 1. $compare_from (int)
- The revision ID to compare from.
- 2. $compare_to (int)
- The revision ID to come to.
Usage
if ( !function_exists( 'wp_get_revision_ui_diff' ) ) { require_once ABSPATH . '/wp-admin/includes/revision.php'; } // The post object. Also accepts a post ID. $post = null; // The revision ID to compare from. $compare_from = -1; // The revision ID to come to. $compare_to = -1; // NOTICE! Understand what this does before running. $result = wp_get_revision_ui_diff($post, $compare_from, $compare_to);
Defined (1)
The function is defined in the following location(s).
- /wp-admin/includes/revision.php
- function wp_get_revision_ui_diff( $post, $compare_from, $compare_to ) {
- if ( ! $post = get_post( $post ) )
- return false;
- if ( $compare_from ) {
- if ( ! $compare_from = get_post( $compare_from ) )
- return false;
- } else {
- // If we're dealing with the first revision...
- $compare_from = false;
- }
- if ( ! $compare_to = get_post( $compare_to ) )
- return false;
- // If comparing revisions, make sure we're dealing with the right post parent.
- // The parent post may be a 'revision' when revisions are disabled and we're looking at autosaves.
- if ( $compare_from && $compare_from->post_parent !== $post->ID && $compare_from->ID !== $post->ID )
- return false;
- if ( $compare_to->post_parent !== $post->ID && $compare_to->ID !== $post->ID )
- return false;
- if ( $compare_from && strtotime( $compare_from->post_date_gmt ) > strtotime( $compare_to->post_date_gmt ) ) {
- $temp = $compare_from;
- $compare_from = $compare_to;
- $compare_to = $temp;
- }
- // Add default title if title field is empty
- if ( $compare_from && empty( $compare_from->post_title ) )
- $compare_from->post_title = __( '(no title)' );
- if ( empty( $compare_to->post_title ) )
- $compare_to->post_title = __( '(no title)' );
- $return = array();
- foreach ( _wp_post_revision_fields( $post ) as $field => $name ) {
- /**
- * Contextually filter a post revision field.
- *
- * The dynamic portion of the hook name, `$field`, corresponds to each of the post
- * fields of the revision object being iterated over in a foreach statement.
- *
- * @since 3.6.0
- *
- * @param string $compare_from->$field The current revision field to compare to or from.
- * @param string $field The current revision field.
- * @param WP_Post $compare_from The revision post object to compare to or from.
- * @param string null The context of whether the current revision is the old
- * or the new one. Values are 'to' or 'from'.
- */
- $content_from = $compare_from ? apply_filters( "_wp_post_revision_field_{$field}", $compare_from->$field, $field, $compare_from, 'from' ) : '';
- /** This filter is documented in wp-admin/includes/revision.php */
- $content_to = apply_filters( "_wp_post_revision_field_{$field}", $compare_to->$field, $field, $compare_to, 'to' );
- $args = array(
- 'show_split_view' => true
- );
- /**
- * Filters revisions text diff options.
- *
- * Filters the options passed to wp_text_diff() when viewing a post revision.
- *
- * @since 4.1.0
- *
- * @param array $args {
- * Associative array of options to pass to wp_text_diff().
- *
- * @type bool $show_split_view True for split view (two columns), false for
- * un-split view (single column). Default true.
- * }
- * @param string $field The current revision field.
- * @param WP_Post $compare_from The revision post to compare from.
- * @param WP_Post $compare_to The revision post to compare to.
- */
- $args = apply_filters( 'revision_text_diff_options', $args, $field, $compare_from, $compare_to );
- $diff = wp_text_diff( $content_from, $content_to, $args );
- if ( ! $diff && 'post_title' === $field ) {
- // It's a better user experience to still show the Title, even if it didn't change.
- // No, you didn't see this.
- $diff = '<table class="diff"><colgroup><col class="content diffsplit left"><col class="content diffsplit middle"><col class="content diffsplit right"></colgroup><tbody><tr>';
- $diff .= '</tr></tbody>';
- $diff .= '</table>';
- }
- if ( $diff ) {
- $return[] = array(
- 'id' => $field,
- 'name' => $name,
- 'diff' => $diff,
- );
- }
- }
- /**
- * Filters the fields displayed in the post revision diff UI.
- *
- * @since 4.1.0
- *
- * @param array $return Revision UI fields. Each item is an array of id, name and diff.
- * @param WP_Post $compare_from The revision post to compare from.
- * @param WP_Post $compare_to The revision post to compare to.
- */
- return apply_filters( 'wp_get_revision_ui_diff', $return, $compare_from, $compare_to );
- }