2010-08-31 24 views
5

tengo el siguiente código en header.php hacerse eco de Identificación del cuerpo: <body id="<?php echo $body; ?>"> que se toma de una variable de index.php: cuerpo $ = "casa";¿La variable de PHP no funciona en un encabezado y archivo de índice de Wordpress?

El resultado de salida es: cuerpo id = ""

Cualquier sugerencia de solucionar este problema?

(he hecho var_dump ($ cuerpo) y el valor es "casa" por lo que la variable está trabajando)

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

¿Hiciste el vardump en el mismo lugar que intentas repetirlo? –

Respuesta

5

Tiene un problema de alcance variable.

Dado que la inclusión de header.php se realiza mediante la función get_header(), la variable $body dentro del archivo header.php está dentro del alcance de esa función (es decir, es una variable local en la función).

Debe declarar la variable como global dentro del archivo header.php. Antes de hacer cualquier otra cosa con la variable, añada esta línea a header.php:

global $body; 

Creo que esto debería ayudar a lograr el comportamiento que usted está buscando.

Vea éstas como referencia:

PHP Variable Scope

Wordpress - Stepping Into Templates

+0

¡Oye, funcionó gracias! – alexchenco

1

En realidad lo que está sucediendo es mucho más simple que eso. El archivo header.php se está llamando antes de index.php. Si eliminases todo el HTML y simplemente miraras el PHP, verías esto.

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

usted está tratando de hacerse eco del valor de $body antes de que se estableció nunca.

Cuestiones relacionadas