函数文档

validate_theme_requirements()

💡 云策文档标注

概述

validate_theme_requirements() 函数用于验证主题的 WordPress 和 PHP 版本要求。它基于主题 style.css 文件中的 Requires at least 和 Requires PHP 头部信息进行检查。

关键要点

  • 函数参数:$stylesheet(必需),主题的目录名称。
  • 返回值:如果满足要求返回 true,否则返回 WP_Error 对象。
  • 依赖函数:is_wp_version_compatible() 和 is_php_version_compatible() 用于检查版本兼容性。
  • 错误处理:根据不兼容情况返回不同的 WP_Error 消息,区分 WordPress 和 PHP 版本问题。
  • 过滤器:提供 validate_theme_requirements 过滤器,允许管理员添加额外验证步骤。

代码示例

function validate_theme_requirements( $stylesheet ) {
    $theme = wp_get_theme( $stylesheet );

    $requirements = array(
        'requires'     => ! empty( $theme->get( 'RequiresWP' ) ) ? $theme->get( 'RequiresWP' ) : '',
        'requires_php' => ! empty( $theme->get( 'RequiresPHP' ) ) ? $theme->get( 'RequiresPHP' ) : '',
    );

    $compatible_wp  = is_wp_version_compatible( $requirements['requires'] );
    $compatible_php = is_php_version_compatible( $requirements['requires_php'] );

    if ( ! $compatible_wp && ! $compatible_php ) {
        return new WP_Error(
            'theme_wp_php_incompatible',
            sprintf(
                /* translators: %s: Theme name. */
                _x( 'Error: Current WordPress and PHP versions do not meet minimum requirements for %s.', 'theme' ),
                $theme->display( 'Name' )
            )
        );
    } elseif ( ! $compatible_php ) {
        return new WP_Error(
            'theme_php_incompatible',
            sprintf(
                /* translators: %s: Theme name. */
                _x( 'Error: Current PHP version does not meet minimum requirements for %s.', 'theme' ),
                $theme->display( 'Name' )
            )
        );
    } elseif ( ! $compatible_wp ) {
        return new WP_Error(
            'theme_wp_incompatible',
            sprintf(
                /* translators: %s: Theme name. */
                _x( 'Error: Current WordPress version does not meet minimum requirements for %s.', 'theme' ),
                $theme->display( 'Name' )
            )
        );
    }

    /**
     * Filters the theme requirement validation response.
     *
     * If a theme fails due to a Core-provided validation (incompatible WP, PHP versions), this
     * filter will not fire. A WP_Error response will already be returned.
     *
     * This filter is intended to add additional validation steps by site administrators.
     *
     * @since 6.9.0
     *
     * @param bool|WP_Error $met_requirements True if the theme meets requirements, WP_Error if not.
     * @param string $stylesheet Directory name for the theme.
     */
    return apply_filters( 'validate_theme_requirements', true, $stylesheet );
}

注意事项

  • 该函数从 WordPress 5.5.0 版本引入,并在 5.8.0 版本中移除了对 readme.txt 作为后备支持。
  • 过滤器 validate_theme_requirements 仅在主题通过核心验证(即 WordPress 和 PHP 版本兼容)时触发,否则直接返回 WP_Error。

📄 原文内容

Validates the theme requirements for WordPress version and PHP version.

Description

Uses the information from Requires at least and Requires PHP headers defined in the theme’s style.css file.

Parameters

$stylesheetstringrequired
Directory name for the theme.

Return

true|WP_Error True if requirements are met, WP_Error on failure.

Source

function validate_theme_requirements( $stylesheet ) {
	$theme = wp_get_theme( $stylesheet );

	$requirements = array(
		'requires'     => ! empty( $theme->get( 'RequiresWP' ) ) ? $theme->get( 'RequiresWP' ) : '',
		'requires_php' => ! empty( $theme->get( 'RequiresPHP' ) ) ? $theme->get( 'RequiresPHP' ) : '',
	);

	$compatible_wp  = is_wp_version_compatible( $requirements['requires'] );
	$compatible_php = is_php_version_compatible( $requirements['requires_php'] );

	if ( ! $compatible_wp && ! $compatible_php ) {
		return new WP_Error(
			'theme_wp_php_incompatible',
			sprintf(
				/* translators: %s: Theme name. */
				_x( '<strong>Error:</strong> Current WordPress and PHP versions do not meet minimum requirements for %s.', 'theme' ),
				$theme->display( 'Name' )
			)
		);
	} elseif ( ! $compatible_php ) {
		return new WP_Error(
			'theme_php_incompatible',
			sprintf(
				/* translators: %s: Theme name. */
				_x( '<strong>Error:</strong> Current PHP version does not meet minimum requirements for %s.', 'theme' ),
				$theme->display( 'Name' )
			)
		);
	} elseif ( ! $compatible_wp ) {
		return new WP_Error(
			'theme_wp_incompatible',
			sprintf(
				/* translators: %s: Theme name. */
				_x( '<strong>Error:</strong> Current WordPress version does not meet minimum requirements for %s.', 'theme' ),
				$theme->display( 'Name' )
			)
		);
	}

	/**
	 * Filters the theme requirement validation response.
	 *
	 * If a theme fails due to a Core-provided validation (incompatible WP, PHP versions), this
	 * filter will not fire. A WP_Error response will already be returned.
	 *
	 * This filter is intended to add additional validation steps by site administrators.
	 *
	 * @since 6.9.0
	 *
	 * @param bool|WP_Error $met_requirements True if the theme meets requirements, WP_Error if not.
	 * @param string $stylesheet Directory name for the theme.
	 */
	return apply_filters( 'validate_theme_requirements', true, $stylesheet );
}

Hooks

apply_filters( ‘validate_theme_requirements’, bool|WP_Error $met_requirements, string $stylesheet )

Filters the theme requirement validation response.

Changelog

Version Description
5.8.0 Removed support for using readme.txt as a fallback.
5.5.0 Introduced.