WordPress Version: 5.4
/**
* Checks a theme's support for a given feature.
*
* Example usage:
*
* current_theme_supports( 'custom-logo' );
* current_theme_supports( 'html5', 'comment-form' );
*
* @since 2.9.0
* @since 5.3.0 Formalized the existing and already documented `...$args` parameter
* by adding it to the function signature.
*
* @global array $_wp_theme_features
*
* @param string $feature The feature being checked.
* @param mixed ...$args Optional extra arguments to be checked against certain features.
* @return bool True if the current theme supports the feature, false otherwise.
*/
function current_theme_supports($feature, ...$args)
{
global $_wp_theme_features;
if ('custom-header-uploads' == $feature) {
return current_theme_supports('custom-header', 'uploads');
}
if (!isset($_wp_theme_features[$feature])) {
return false;
}
// If no args passed then no extra checks need be performed.
if (!$args) {
return true;
}
switch ($feature) {
case 'post-thumbnails':
/*
* post-thumbnails can be registered for only certain content/post types
* by passing an array of types to add_theme_support().
* If no array was passed, then any type is accepted.
*/
if (true === $_wp_theme_features[$feature]) {
// Registered for all types
return true;
}
$content_type = $args[0];
return in_array($content_type, $_wp_theme_features[$feature][0]);
case 'html5':
case 'post-formats':
/*
* Specific post formats can be registered by passing an array of types
* to add_theme_support().
*
* Specific areas of HTML5 support *must* be passed via an array to add_theme_support().
*/
$type = $args[0];
return in_array($type, $_wp_theme_features[$feature][0]);
case 'custom-logo':
case 'custom-header':
case 'custom-background':
// Specific capabilities can be registered by passing an array to add_theme_support().
return isset($_wp_theme_features[$feature][0][$args[0]]) && $_wp_theme_features[$feature][0][$args[0]];
}
/**
* Filters whether the current theme supports a specific feature.
*
* The dynamic portion of the hook name, `$feature`, refers to the specific theme
* feature. Possible values include 'post-formats', 'post-thumbnails', 'custom-background',
* 'custom-header', 'menus', 'automatic-feed-links', 'html5',
* 'starter-content', and 'customize-selective-refresh-widgets'.
*
* @since 3.4.0
*
* @param bool $supports Whether the current theme supports the given feature. Default true.
* @param array $args Array of arguments for the feature.
* @param string $feature The theme feature.
*/
return apply_filters("current_theme_supports-{$feature}", true, $args, $_wp_theme_features[$feature]);
// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
}