web-dev-qa-db-fra.com

Suppression de la fonction d'arrière-plan et d'en-tête personnalisée dans le thème enfant

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' );
3

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..

4
t31os

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' )

2
Rarst

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.

1
Cronco

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

0
Bainternet

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 ...

Modifier:

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.

0
kaiser