2009-12-20 6 views
0

Je suis un novice en PHP, alors supportez-moi si ma terminologie est incorrecte.Conflit de nom de fonction lors de l'inclusion d'un fichier PHP dans un thème WordPress

J'ai un petit fichier PHP (page_class.php) qui définit certaines fonctions et j'inclure ce fichier dans le header.php de mon thème:

<?php include("page_class.php"); ?> 

Et ceux-ci sont le contenu de page_class.php:

<?php 
function curPageURL() { 
$pageURL = 'http'; 
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
$pageURL .= "://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
} else { 
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
} 
return $pageURL; 
} 

function get_subdomain() { 
    $page_url = curPageURL(); 
    $parts = split('\.', $_SERVER["SERVER_NAME"]); 
    return $parts[0]; 
} 

function get_body_class() { 
    $subdomain = get_subdomain(); 
    if ($subdomain == "keyes") { 
     $path_parts = split('/', $_SERVER["REQUEST_URI"]); 
     $clazz = $path_parts[1]; 
    } 
    else { 
     $clazz = $subdomain; 
    } 
    if ($clazz == "greasemonkey" || $clazz == "wordpress") { 
     $clazz = "work"; 
    } 
    if ($clazz == "") { 
     $clazz = "home"; 
    } 
    return $clazz; 
} 
?> 

J'appelle à get_body_classheader.php:

<body class="<?php echo get_body_class(); ?>"> 

Cette installation a fonctionné dans WordPress MU 2.7.1. J'ai récemment mis à jour à 2.8.6 et il s'est cassé. Lorsque j'ai visité une page du blog, l'écran était vide. Après quelques recherches, je me suis rendu compte qu'en changeant les noms des fonctions (je les préfixais avec jk_) cela a fonctionné à nouveau. J'ai supposé que c'était un conflit de nommage, mais je n'en ai trouvé aucun. Je me demande si les développeurs PHP ou WordPress ont une idée de ce qui se passe.

Répondre

1

get_body_class()seems in fact to be there since 2.8. Vous n'êtes pas le seul à avoir eu le problème: Voir here. Par ailleurs, bien qu'il soit normal que les rapports d'erreurs soient désactivés sur un serveur de production, vous pouvez en augmenter le nombre si vous avez des erreurs de ce type.

error_reporting(E_ALL^E_NOTICE); 
+0

Maintenant, sachez comment 'trouver grep' manqué cela. Merci. –

+0

Pas de problème. Je viens d'éditer ma réponse un peu. –

+0

Excellent, merci. –

0

Je viens de télécharger les sources de WordPress 2.9 (pas exactement la même version que le vôtre, je l'avoue, mais il est le dernier et le plus facile à obtenir à partir wordpress.org), et il semble qu'il est déjà une fonction get_body_class existante:

$ grep -rn 'get_body_class' * 
wp-includes/post-template.php:354:  echo 'class="' . join(' ', get_body_class($class)) . '"'; 
wp-includes/post-template.php:365:function get_body_class($class = '') { 

Il semble que la fonction est définie dans post-template.php(ligne 365 dans wordpress 2.9); ce qui explique le conflit, car il n'est pas possible d'avoir deux fonctions avec le même nom, en PHP.

+0

Merci Pascal. Je ne sais pas comment mon 'find grep' a manqué ça. Doit avoir été une faute de frappe. Je pense que Stack Overflow a besoin de présenter un badge Embarrassé pour moi :) –

+0

de rien :-) peut-être que vous n'avez pas grep récursivement, ou quelque chose comme ça? –

+0

J'utilise find pour le récurage récursif 'find. -name "* .php" -exec grep -H get_body_class {} \; 'Qui sait? De toute façon, je vais grep deux fois avant de poster à partir de maintenant :) –

Questions connexes