PHP变量在Wordpress标题和索引文件中不起作用?

时间:2010-08-31 00:54:34

标签: php wordpress variables

我在 header.php 中有以下代码来回显正文的身份:<body id="<?php echo $body; ?>">,它来自 index.php 的变量:$ body =“家”;

输出结果为: body id =“”

有任何解决此问题的建议吗?

(我创建了var_dump($ body),值为“home”,因此变量正常工作)

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(); ?>

2 个答案:

答案 0 :(得分:5)

您正在处理变量范围问题。

由于header.php的包含是由get_header()函数完成的,所以header.php文件中的$body变量包含在该函数的范围内(即它是一个局部变量)在功能)。

您需要在header.php文件中将变量声明为全局变量。在对变量进行任何其他操作之前,请将此行添加到header.php:

global $body;

我相信这应该有助于实现您正在寻找的行为。

请参阅以下内容:

PHP Variable Scope

Wordpress - Stepping Into Templates

答案 1 :(得分:1)

实际上发生的事情比这简单得多。在index.php之前调用header.php文件。如果您要删除所有HTML并只看PHP,您会看到这一点。

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

您只是试图在$body设置之前回显它的价值。