在WordPress主题中包含PHP文件时,函数名称冲突

时间:2009-12-20 23:19:08

标签: 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_class中致电header.php

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

此设置适用于WordPress MU 2.7.1。我最近升级到2.8.6而且它破了。当我访问博客上的任何页面时,屏幕都是空白的。

经过一番调查后,我发现通过更改函数名称(我用jk_作为前缀),它再次起作用。

我猜这是一个命名冲突,但找不到任何。我想知道任何PHP或WordPress开发者都知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

get_body_class() seems in fact to be there since 2.8。您不是唯一遇到问题的人:请参阅here

顺便说一句,虽然在生产服务器上关闭错误报告是正确的,但如果出现类似错误,可能需要将其调整一些。

error_reporting(E_ALL ^ E_NOTICE);

答案 1 :(得分: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 中定义(wordpress 2.9中的第365行);这解释了冲突,因为在PHP中不可能有两个具有相同名称的函数。