2010-08-31 3 views
5

Ho il seguente codice in header.php per richiamare l'id del corpo: <body id="<?php echo $body; ?>"> che è preso da una variabile da index.php: $ body = "home";La variabile PHP non funziona in un'intestazione di Wordpress e un file di indice?

Il risultato di uscita è: corpo id = ""

Qualsiasi suggerimento per risolvere questo problema?

(ho fatto var_dump ($ corpo) e il valore è "casa" così la variabile sta lavorando)

header.php:

<?php 
/** 
* The Header for our theme. 
* 
* Displays all of the <head> section and everything up till <div id="main"> 
* 
* @package WordPress 
* @subpackage Starkers 
* @since Starkers 3.0 
*/ 
?><!DOCTYPE html> 
<html <?php language_attributes(); ?>> 
<head> 
<meta charset="<?php bloginfo('charset'); ?>" /> 
<title><?php 
    /* 
    * Print the <title> tag based on what is being viewed. 
    * We filter the output of wp_title() a bit -- see 
    * twentyten_filter_wp_title() in functions.php. 
    */ 
    wp_title('|', true, 'right'); 

    ?></title> 
<link rel="profile" href="http://gmpg.org/xfn/11" /> 
<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo('stylesheet_url'); ?>" /> 
<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" /> 
<?php 
    /* We add some JavaScript to pages with the comment form 
    * to support sites with threaded comments (when in use). 
    */ 
    if (is_singular() && get_option('thread_comments')) 
     wp_enqueue_script('comment-reply'); 

    /* Always have wp_head() just before the closing </head> 
    * tag of your theme, or you will break many plugins, which 
    * generally use this hook to add elements to <head> such 
    * as styles, scripts, and meta tags. 
    */ 
    wp_head(); 
?> 
</head> 

<!--<body <?php body_class(); ?>>--> 
<body id="<?php echo $body; ?>"> 
<div id="header"> 
    <div class="container"> 
     <div id="header-top"> 
      <h1> 
       <a href="<?php echo home_url('/'); ?>" title="<?php echo esc_attr(get_bloginfo('name', 'display')); ?>" rel="home"><?php bloginfo('name'); ?></a> 
      </h1> 
      <!--<p><?php bloginfo('description'); ?></p>--> 

      <div id="access" role="navigation"> 
       <?php /* Allow screen readers/text browsers to skip the navigation menu and get right to the good stuff */ ?> 
       <!--<a href="#content" title="<?php esc_attr_e('Skip to content', 'twentyten'); ?>"><?php _e('Skip to content', 'twentyten'); ?></a>--> 
       <?php /* Our navigation menu. If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assiged to the primary position is the one used. If none is assigned, the menu with the lowest ID is used. */ ?> 
       <?php wp_nav_menu(array('container_class' => 'menu-header', 'theme_location' => 'primary')); ?> 
      </div><!-- #access --> 
      <ul id="lang"> 
       <li <?php if($lang_file=='lang.en.php') {echo 'class="current"';} ?>><a href="index.php?lang=en">ENGLISH</a></li> 
       <li <?php if($lang_file=='lang.zh-tw.php') {echo 'class="current"';} ?>><a href="index.php?lang=zh-tw">CHINESE</a></li> 
      </ul> 
     </div> 
    </div><!-- .container --> 
</div><!-- #header --> 

index.php:

<?php 
/** 
* The main template file. 
* 
* This is the most generic template file in a WordPress theme 
* and one of the two required files for a theme (the other being style.css). 
* It is used to display a page when nothing more specific matches a query. 
* E.g., it puts together the home page when no home.php file exists. 
* Learn more: http://codex.wordpress.org/Template_Hierarchy 
* 
* @package WordPress 
* @subpackage Starkers 
* @since Starkers 3.0 
*/ 
$body = "home"; 
include_once 'localization.php'; 
get_header(); ?> 
<div id="content"> 
    <div class="container"> 
     <div id="mainbar"> 
      <?php 
      /* Run the loop to output the posts. 
      * If you want to overload this in a child theme then include a file 
      * called loop-index.php and that will be used instead. 
      */ 
      get_template_part('loop', 'index'); 
      ?> 
      <p><?php echo l('test'); ?></p> 
     </div> 
     <?php get_sidebar(); ?> 
    </div><!-- .container --> 
</div><!-- #main-content --> 
<?php get_footer(); ?> 
+0

Hai fatto il vardump nello stesso punto in cui stai cercando di farlo eco? –

risposta

5

Si tratta di un problema di ambito variabile.

Poiché l'inclusione della header.php viene effettuata dalla funzione get_header(), la variabile $body all'interno del file header.php è contenuta nell'ambito di quella funzione (cioè è una variabile locale nella funzione).

È necessario dichiarare la variabile come globale all'interno del file header.php. Prima di fare qualsiasi altra cosa con la variabile, aggiungere questa linea al header.php:

global $body; 

Credo che questo dovrebbe contribuire a realizzare il comportamento che stai cercando.

vedere questi per riferimento:

PHP Variable Scope

Wordpress - Stepping Into Templates

+0

Hey ha funzionato grazie! – alexchenco

1

In realtà ciò che sta accadendo è molto più semplice di quello. Il file header.php viene chiamato prima di index.php. Se dovessi eliminare tutto il codice HTML e dare un'occhiata al PHP, vedresti questo.

<body id="<?php echo $body; ?>"> 
    <?php $body = "home"; 
      include_once 'localization.php'; 
      get_header(); ?> 

si sta solo cercando di eco il valore di $body prima che fosse mai impostato.