WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WP_Upgrader::run() WP 2.8.0

Run an upgrade/installation.

Attempts to download the package (if it is not a local file), unpack it, and install it in the destination folder.

Это метод класса: WP_Upgrader

Возвращает

Массив/false/WP_error. The result from self::install_package() on success, otherwise a WP_Error, or false if unable to connect to the filesystem.

Использование

$WP_Upgrader = new WP_Upgrader();
$var = $WP_Upgrader->run( $options );
$options(массив) (обязательный)

Array or string of arguments for upgrading/installing a package.

  • $package (строка)
    The full path or URI of the package to install.
    По умолчанию: ''

  • $destination (строка)
    The full path to the destination folder.
    По умолчанию: ''

  • $clear_destination (true/false)
    Whether to delete any files already in the destination folder.
    По умолчанию: false

  • $clear_working (true/false)
    Whether to delete the files form the working directory after copying to the destination.
    По умолчанию: false

  • $abort_if_destination_exists (true/false)
    Whether to abort the installation if the destination folder already exists. When true, $clear_destination should be false.
    По умолчанию: true

  • $is_multi (true/false)
    Whether this run is one of multiple upgrade/installation actions being performed in bulk. When true, the skin WP_Upgrader::header() and WP_Upgrader::footer() aren't called.
    По умолчанию: false

  • $hook_extra (массив)
    Extra arguments to pass to the filter hooks called by WP_Upgrader::run().

Список изменений

С версии 2.8.0 Введена.

Код WP Upgrader::run: wp-admin/includes/class-wp-upgrader.php WP 5.2.4

<?php
public function run( $options ) {

	$defaults = array(
		'package'                     => '', // Please always pass this.
		'destination'                 => '', // And this
		'clear_destination'           => false,
		'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
		'clear_working'               => true,
		'is_multi'                    => false,
		'hook_extra'                  => array(), // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
	);

	$options = wp_parse_args( $options, $defaults );

	/**
	 * Filters the package options before running an update.
	 *
	 * See also {@see 'upgrader_process_complete'}.
	 *
	 * @since 4.3.0
	 *
	 * @param array $options {
	 *     Options used by the upgrader.
	 *
	 *     @type string $package                     Package for update.
	 *     @type string $destination                 Update location.
	 *     @type bool   $clear_destination           Clear the destination resource.
	 *     @type bool   $clear_working               Clear the working resource.
	 *     @type bool   $abort_if_destination_exists Abort if the Destination directory exists.
	 *     @type bool   $is_multi                    Whether the upgrader is running multiple times.
	 *     @type array  $hook_extra {
	 *         Extra hook arguments.
	 *
	 *         @type string $action               Type of action. Default 'update'.
	 *         @type string $type                 Type of update process. Accepts 'plugin', 'theme', or 'core'.
	 *         @type bool   $bulk                 Whether the update process is a bulk update. Default true.
	 *         @type string $plugin               Path to the plugin file relative to the plugins directory.
	 *         @type string $theme                The stylesheet or template name of the theme.
	 *         @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme',
	 *                                            or 'core'.
	 *         @type object $language_update      The language pack update offer.
	 *     }
	 * }
	 */
	$options = apply_filters( 'upgrader_package_options', $options );

	if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times
		$this->skin->header();
	}

	// Connect to the Filesystem first.
	$res = $this->fs_connect( array( WP_CONTENT_DIR, $options['destination'] ) );
	// Mainly for non-connected filesystem.
	if ( ! $res ) {
		if ( ! $options['is_multi'] ) {
			$this->skin->footer();
		}
		return false;
	}

	$this->skin->before();

	if ( is_wp_error( $res ) ) {
		$this->skin->error( $res );
		$this->skin->after();
		if ( ! $options['is_multi'] ) {
			$this->skin->footer();
		}
		return $res;
	}

	/*
	 * Download the package (Note, This just returns the filename
	 * of the file if the package is a local file)
	 */
	$download = $this->download_package( $options['package'], true );

	// Allow for signature soft-fail.
	// WARNING: This may be removed in the future.
	if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) {

		// Don't output the 'no signature could be found' failure message for now.
		if ( 'signature_verification_no_signature' != $download->get_error_code() || WP_DEBUG ) {
			// Outout the failure error as a normal feedback, and not as an error:
			$this->skin->feedback( $download->get_error_message() );

			// Report this failure back to WordPress.org for debugging purposes.
			wp_version_check(
				array(
					'signature_failure_code' => $download->get_error_code(),
					'signature_failure_data' => $download->get_error_data(),
				)
			);
		}

		// Pretend this error didn't happen.
		$download = $download->get_error_data( 'softfail-filename' );
	}

	if ( is_wp_error( $download ) ) {
		$this->skin->error( $download );
		$this->skin->after();
		if ( ! $options['is_multi'] ) {
			$this->skin->footer();
		}
		return $download;
	}

	$delete_package = ( $download != $options['package'] ); // Do not delete a "local" file

	// Unzips the file into a temporary directory.
	$working_dir = $this->unpack_package( $download, $delete_package );
	if ( is_wp_error( $working_dir ) ) {
		$this->skin->error( $working_dir );
		$this->skin->after();
		if ( ! $options['is_multi'] ) {
			$this->skin->footer();
		}
		return $working_dir;
	}

	// With the given options, this installs it to the destination directory.
	$result = $this->install_package(
		array(
			'source'                      => $working_dir,
			'destination'                 => $options['destination'],
			'clear_destination'           => $options['clear_destination'],
			'abort_if_destination_exists' => $options['abort_if_destination_exists'],
			'clear_working'               => $options['clear_working'],
			'hook_extra'                  => $options['hook_extra'],
		)
	);

	$this->skin->set_result( $result );
	if ( is_wp_error( $result ) ) {
		$this->skin->error( $result );
		$this->skin->feedback( 'process_failed' );
	} else {
		// Installation succeeded.
		$this->skin->feedback( 'process_success' );
	}

	$this->skin->after();

	if ( ! $options['is_multi'] ) {

		/**
		 * Fires when the upgrader process is complete.
		 *
		 * See also {@see 'upgrader_package_options'}.
		 *
		 * @since 3.6.0
		 * @since 3.7.0 Added to WP_Upgrader::run().
		 * @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`.
		 *
		 * @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a
		 *                          Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
		 * @param array       $hook_extra {
		 *     Array of bulk item update data.
		 *
		 *     @type string $action       Type of action. Default 'update'.
		 *     @type string $type         Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
		 *     @type bool   $bulk         Whether the update process is a bulk update. Default true.
		 *     @type array  $plugins      Array of the basename paths of the plugins' main files.
		 *     @type array  $themes       The theme slugs.
		 *     @type array  $translations {
		 *         Array of translations update data.
		 *
		 *         @type string $language The locale the translation is for.
		 *         @type string $type     Type of translation. Accepts 'plugin', 'theme', or 'core'.
		 *         @type string $slug     Text domain the translation is for. The slug of a theme/plugin or
		 *                                'default' for core translations.
		 *         @type string $version  The version of a theme, plugin, or core.
		 *     }
		 * }
		 */
		do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );

		$this->skin->footer();
	}

	return $result;
}