web-dev-qa-db-fra.com

Erreur fatale: Impossible de redéclarer lors du changement de thème

J'ai construit un thème à partir de zéro qui s'appelle "core". Core a un thème enfant appelé "core_child". Le thème de mon enfant fonctionne parfaitement et ne contient que les éléments suivants:

  1. /images
  2. screenshot.png
  3. style.css

Aujourd’hui, j’avais besoin d’activer le "noyau" pour apporter quelques modifications. J'ai reçu l'erreur suivante lors de l'activation:

Fatal error: Cannot redeclare add_slug_body_class() in /Applications/MAMP/htdocs/fresh_install/wp-content/themes/core/functions.php on line 3

L'erreur indique que j'ai un conflit de fonctions. Cela m'a incité à ouvrir mon fichier functions.php. J'ai renommé la fonction add_slug_body_class en body_slug_core et ceci a reproduit l'erreur suivante:

Fatal error: Cannot redeclare body_slug_core() in /Applications/MAMP/htdocs/fresh_install/wp-content/themes/core/functions.php on line 3

Voici la fonction qui cause le problème:

// Page slug body class
function body_slug_core( $classes ) {
global $post;
if ( isset( $post ) ) {
$classes[] = $post->post_type . '-' . $post->post_name;
}
return $classes;
}
add_filter( 'body_class', 'body_slug_core' );

Ensuite, j'ai supprimé la fonction complètement. Cela a généré l'erreur suivante:

Fatal error: Cannot redeclare remove_default_image_sizes() in /Applications/MAMP/htdocs/fresh_install/wp-content/themes/core/functions.php on line 23

Cette erreur fait référence à la fonction suivante dans functions.php. Voici le code:

// Remove WP default image sizes
function remove_default_image_sizes( $sizes) {
    unset( $sizes['medium']);
    unset( $sizes['large']);
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'remove_default_image_sizes');

J'ai répété ce que j'avais essayé pour la première fonction (renommer puis supprimer complètement la fonction), mais elle a simplement signalé la fonction suivante en tant que conflit.

J'ai lu que cela peut être causé par des sites Web WordPress qui ont été compromis. Ce n'est pas le cas car je n'ai exécuté les thèmes que localement via MAMP. J'ai changé les noms des fonctions qui excluent tout conflit avec les fichiers de base WordPress.

J'ai essayé une nouvelle installation de WordPress avec une base de données propre sans aucun plugin en cours d'exécution. Pour reprendre le contrôle de wp-admin, j'ai renommé le dossier du thème principal en core_. Cela produit un autre avertissement dans wp-admin qui peut ne pas être lié:

Warning: implode(): Invalid arguments passed in /Applications/MAMP/htdocs/fresh_install/wp-includes/class-wp-theme.php on line 675

L'avertissement disparaît lorsque j'actualise la page.

Version WordPress: 3.8.3

1
Sam

Le CSS pour mon thème parent (noyau) était mal formaté. Le code en haut se lit comme suit:

Theme Name: Core
Theme URI: http://www.domain.co.uk
Description:  The core theme.
Author: Squideyes
Author URI: http://www.domain.co.uk
Template: Core
Version: 1.0.0
Tags: clean, simple, easy

La balise Template: ne doit apparaître que dans le css du thème enfant. C'est ce qui a provoqué le conflit de fonctions.

1
Sam