2009-12-20 31 views
0

我是PHP新手,如果我的任何術語不正確,請耐心等待。在WordPress主題中包含PHP文件時函數名稱衝突

我有一個小的PHP文件(page_class.php),它定義了一些功能,包括我在我的主題的header.php這個文件:

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

而這些都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; 
} 
?> 

我打電話get_body_classheader.php

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

這個設置工作在WordPress MU 2.7.1。我最近升級到2.8.6,它打破了。當我訪問博客上的任何頁面時,屏幕都是空白的。

經過一番調查後,我發現通過改變函數名稱(我在前綴jk_前面),它再次運行。

我猜這是一個命名衝突,但找不到任何。我想知道任何PHP或WordPress開發者都知道爲什麼會發生這種情況。

回答

1

get_body_class()seems in fact to be there since 2.8。您不是唯一遇到問題的人:請參閱here

順便說一下,雖然在生產服務器上關閉錯誤報告是正確的,但如果出現類似錯誤,您可能需要將其關閉。

error_reporting(E_ALL^E_NOTICE); 
+0

現在確定我的'find grep'如何錯過了。謝謝。 – 2009-12-20 23:25:42

+0

沒問題。我剛剛編輯了我的答案。 – 2009-12-20 23:26:44

+0

非常好,謝謝。 – 2009-12-20 23:34:55

0

我剛剛下載的WordPress的2.9源代碼(不完全一樣的版本是你的,我承認,但它是最後一個,而最容易從wordpress.org得到),似乎有已經是一個現有get_body_class功能:

$ 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 = '') { 

似乎函數在post-template.php定義(線365在WordPress 2.9);這解釋了衝突,因爲在PHP中不可能有兩個具有相同名稱的函數。

+0

謝謝帕斯卡。不知道我的'find grep'如何錯過了。一定是一個錯字。我認爲Stack Overflow需要爲我引入一個尷尬的徽章:) – 2009-12-20 23:26:50

+0

不客氣:-)也許你沒有grep遞歸,或類似的東西? – 2009-12-20 23:28:24

+0

我使用find來尋找遞歸grepping。 -name「* .php」-exec grep -H get_body_class {} \;'誰知道?無論哪種方式,我會grep兩次,然後張貼從現在:) – 2009-12-20 23:34:07