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

Theme_Upgrader::check_package() public WP 3.3.0

Check that the package source contains a valid theme.

Hooked to the 'upgrader_source_selection' filter by Theme_Upgrader::install(). It will return an error if the theme doesn't have style.css or index.php files.

Это метод класса: Theme_Upgrader{}

Хуков нет.

Возвращает

Строку/WP_Error. The source or a WP_Error.

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

$Theme_Upgrader = new Theme_Upgrader();
$Theme_Upgrader->check_package( $source );
$source(строка) (обязательный)
The full path to the package source.

Заметки

  • Global. WP_Filesystem_Base. $wp_filesystem WordPress filesystem subclass.

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

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

Код Theme_Upgrader::check_package() WP 5.5.1

wp-admin/includes/class-theme-upgrader.php
<?php
public function check_package( $source ) {
	global $wp_filesystem;

	$this->new_theme_data = array();

	if ( is_wp_error( $source ) ) {
		return $source;
	}

	// Check that the folder contains a valid theme.
	$working_directory = str_replace( $wp_filesystem->wp_content_dir(), trailingslashit( WP_CONTENT_DIR ), $source );
	if ( ! is_dir( $working_directory ) ) { // Sanity check, if the above fails, let's not prevent installation.
		return $source;
	}

	// A proper archive should have a style.css file in the single subdirectory.
	if ( ! file_exists( $working_directory . 'style.css' ) ) {
		return new WP_Error(
			'incompatible_archive_theme_no_style',
			$this->strings['incompatible_archive'],
			sprintf(
				/* translators: %s: style.css */
				__( 'The theme is missing the %s stylesheet.' ),
				'<code>style.css</code>'
			)
		);
	}

	// All these headers are needed on Theme_Installer_Skin::do_overwrite().
	$info = get_file_data(
		$working_directory . 'style.css',
		array(
			'Name'        => 'Theme Name',
			'Version'     => 'Version',
			'Author'      => 'Author',
			'Template'    => 'Template',
			'RequiresWP'  => 'Requires at least',
			'RequiresPHP' => 'Requires PHP',
		)
	);

	if ( empty( $info['Name'] ) ) {
		return new WP_Error(
			'incompatible_archive_theme_no_name',
			$this->strings['incompatible_archive'],
			sprintf(
				/* translators: %s: style.css */
				__( 'The %s stylesheet doesn&#8217;t contain a valid theme header.' ),
				'<code>style.css</code>'
			)
		);
	}

	// If it's not a child theme, it must have at least an index.php to be legit.
	if ( empty( $info['Template'] ) && ! file_exists( $working_directory . 'index.php' ) ) {
		return new WP_Error(
			'incompatible_archive_theme_no_index',
			$this->strings['incompatible_archive'],
			sprintf(
				/* translators: %s: index.php */
				__( 'The theme is missing the %s file.' ),
				'<code>index.php</code>'
			)
		);
	}

	$requires_php = isset( $info['RequiresPHP'] ) ? $info['RequiresPHP'] : null;
	$requires_wp  = isset( $info['RequiresWP'] ) ? $info['RequiresWP'] : null;

	if ( ! is_php_version_compatible( $requires_php ) ) {
		$error = sprintf(
			/* translators: 1: Current PHP version, 2: Version required by the uploaded theme. */
			__( 'The PHP version on your server is %1$s, however the uploaded theme requires %2$s.' ),
			phpversion(),
			$requires_php
		);

		return new WP_Error( 'incompatible_php_required_version', $this->strings['incompatible_archive'], $error );
	}
	if ( ! is_wp_version_compatible( $requires_wp ) ) {
		$error = sprintf(
			/* translators: 1: Current WordPress version, 2: Version required by the uploaded theme. */
			__( 'Your WordPress version is %1$s, however the uploaded theme requires %2$s.' ),
			$GLOBALS['wp_version'],
			$requires_wp
		);

		return new WP_Error( 'incompatible_wp_required_version', $this->strings['incompatible_archive'], $error );
	}

	$this->new_theme_data = $info;

	return $source;
}