【问题标题】:Function name conflict when including a PHP file in a WordPress Theme在 WordPress 主题中包含 PHP 文件时的函数名称冲突
【发布时间】:2009-12-20 23:19:08
【问题描述】:

我是 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 开发人员知道为什么会发生这种情况。

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

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

    顺便说一句,虽然在生产服务器上关闭错误报告是正确的做法,但如果遇到此类错误,您可能需要将其打开一些。

    error_reporting(E_ALL ^ E_NOTICE);
    

    【讨论】:

    • 现在确定我的find grep 是如何错过的。谢谢。
    【解决方案2】:

    我刚刚下载了 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 中不可能有两个同名的函数。

    【讨论】:

    • 谢谢帕斯卡。不知道我的find grep 是怎么错过的。一定是笔误。我认为 Stack Overflow 需要为我介绍一个尴尬的徽章 :)
    • 不客气 :-) 也许你没有递归 grep 或类似的东西?
    • 我使用 find 进行递归 grepping find . -name "*.php" -exec grep -H get_body_class {} \; 谁知道?无论哪种方式,从现在开始,我都会在发帖之前先 grep 两次 :)
    • 谷歌搜索“functionname wordpress”是一个很好的附加措施。 :)
    • @Pekka : 确实 ^^ 但没那么有趣 ;-)
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多