代码之家  ›  专栏  ›  技术社区  ›  John Keyes

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

  •  0
  • John Keyes  · 技术社区  · 15 年前

    我是一个PHP新手,所以如果我的任何术语不正确,请耐心等待。

    我有一个小的PHP文件( page_class.php )它定义了一些函数,我将此文件包含在主题的header.php中:

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

    这些是 PGEAL类 :

    <?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 回复  |  直到 15 年前
        1
  •  1
  •   Pekka    15 年前

    get_body_class() seems in fact to be there since 2.8 . 你不是唯一有问题的人:看 here .

    顺便说一下,虽然在生产服务器上关闭错误报告是正确的事情,但是如果出现这样的错误,您可能需要打开它。

    error_reporting(E_ALL ^ E_NOTICE);
    
        2
  •  0
  •   Pascal MARTIN    15 年前

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