WordPress Tema, bir PHP dosyası da dahil olmak üzere işlev adı çakışması

2 Cevap php

Ben bir PHP acemi değilim, bu yüzden benim terminoloji herhangi bir yanlış varsa benimle ayı.

Ben (page_class.php) bazı fonksiyonları tanımlar ve benim tema header.php bu dosyayı içeren küçük bir PHP dosyası vardır:

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

Ve bu içerikleri 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;
}
?>

I get_body_class çağırmak header.php:

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

Bu kurulum WordPress MU 2.7.1 çalıştı. Geçenlerde 2.8.6 yükseltilmiş ve kırdı. Ben blogda herhangi bir sayfayı ziyaret ettiğinde ekranı boş oldu.

Biraz araştırma yaptıktan sonra ben işlev isimlerini değiştirerek yeniden çalıştı (I jk_ ile öneki) olduğunu anladım.

Ben bu bir ad çakışması olduğunu tahmin, ama bulamadım. Ben herhangi bir PHP veya WordPress Devs bu durumda neden bir fikrin var mı merak ediyorum.

2 Cevap

get_body_class() seems in fact to be there since 2.8. Eğer sorun vardı tek değilsin: bak here.

Bu hata raporlama bir üretim sunucusuna kapalı olması doğru şey ise arada, size bu gibi hataları alırsanız bazıları bunu açmak isteyebilirsiniz.

error_reporting(E_ALL ^ E_NOTICE);

(Sizinki, itiraf gibi değil tam olarak aynı sürüm, ancak sonuncusu, ve wordpress.org almak için en kolay) Ben sadece wordpress 2.9 kaynaklarını indirdiğiniz ve varolan {[(zaten var gibi görünüyor 0)]} fonksiyonu:

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

Bu, bu işlev post-template.php {[(1)}] 'de tanımlandığı gibi görünüyor; PHP içinde, aynı adı taşıyan iki işlevi olması mümkün değil gibi, hangi çatışmayı açıklar.