我是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开发者都知道为什么会这样。
答案 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中不可能有两个具有相同名称的函数。