Je crée un thème pour enfants en utilisant vingtten comme base. Je cherche un moyen de supprimer les fonctionnalités permettant d'ajouter un en-tête et un arrière-plan personnalisés sans toucher au fichier functions.php
dans le thème parent.
pas de chance avec ça :(
function my_child_theme_setup() {
remove_theme_support('custom-background');
remove_theme_support('custom-header');
}
add_action( 'after_setup_theme', 'my_child_theme_setup' );
Les fonctions d’en-tête et d’image d’arrière-plan permettent de configurer des éléments globaux afin de fonctionner. La suppression de ces éléments globaux semble avoir un effet et au moins les supprime du côté de l’administration.
add_action('after_setup_theme', 'remove_theme_features', 11 );
function remove_theme_features() {
$GLOBALS['custom_background'] = 'kill_theme_features';
$GLOBALS['custom_image_header'] = 'kill_theme_features';
}
class kill_theme_features {
function init() { return false; }
}
Il est attendu qu'un nom de classe soit fourni en tant que rappel pour ces deux fonctionnalités, et les deux s'attendent à ce que la classe donnée ait une méthode init. La solution consistait à créer une classe fictive qui ne fait rien et à mettre à jour les globals, ce qui élimine efficacement l'arrière-plan du thème et les pages d'en-tête dans la zone d'administration.
J'espère que cela pourra aider..
Le thème enfant est traité avant le thème parent. Donc, votre fonction devient accro avant et tire avant twentyten_setup()
.
Essayer:
add_action( 'after_setup_theme', 'my_child_theme_setup', 11 );
Sinon, vous pouvez copier twentyten_setup()
dans votre thème enfant et le modifier, car il est déclaré de manière conditionnelle sur ! function_exists( 'twentyten_setup' )
remove_theme_support devrait faire l'affaire.
MODIFIER-
Il semble que les en-têtes et les arrière-plans personnalisés possèdent leurs propres fonctions: En-têtes personnalisés . Je suppose que le même type de fonction devrait être utilisé pour les arrière-plans personnalisés, mais je ne le trouve pas dans la référence, mais dans les fichiers.
EDIT 2 -
La fonction remove_custom_image_header
est disponible uniquement à partir de la version 3.1, selon le codex. Je suggérerais la suggestion de Rarst maintenant.
essayer:
function my_child_theme_setup() {
global $_wp_theme_features;
unset( $_wp_theme_features['custom-background'] );
unset( $_wp_theme_features['custom-header'] );
}
add_action( 'after_setup_theme', 'my_child_theme_setup' );
J'espère que cela t'aides
Après une brève recherche dans le noyau, je n’ai pas pu vérifier l’existence de remove_custom_image_header()
*). J'ai seulement trouvé add_custom_image_header()
qui utilise add_theme_support()
, donc cela devrait fonctionner.
Si ce n'est pas le cas, vous pouvez vous rapprocher du cœur et utiliser l'API Thème Modifications . Aussi étrange qu’il soit: l’API ne dispose que d’une fonction qui supprime toutes les modifications: remove_theme_mods()
qui ne prend aucun paramètre supplémentaire.
Après y avoir réfléchi, votre meilleure chance est de le filtrer: add_filter( "theme_mod_$name", 'your_callback_fn' );
, mais je ne suis pas tout à fait sûr s'il le supprime de l'interface utilisateur d'administration (10% de chance que ce soit le cas). Alors peut-être devrez-vous annuler les entrées de menu via une autre fonction.
Quoi qu'il en soit: jetez un coup d'œil dans ~/wp-includes/theme.php
... c'est le fichier de support "vingt-dix" (qui ne sera pas utilisé par d'autres thèmes, je suppose).
*) C'est vraiment étrange ...
remove_custom_image_header()
est maintenant disponible avec WP 3.1+.
Et une brève édition de @ t310s répond:
function remove_theme_features()
{
$GLOBALS['custom_background'] = '__return_false';
$GLOBALS['custom_image_header'] = '__return_false';
}
add_action( 'after_setup_theme', 'remove_theme_features', 20 );
C'est justeshort.