PHP-Variable funktioniert nicht in einer WordPress-Header- und Indexdatei?

Lesezeit: 5 Minuten

Benutzer-Avatar
alexchenko

Ich habe folgenden Code drin header.php um die ID des Körpers zu wiederholen: <body id="<?php echo $body; ?>"> die aus einer Variablen entnommen wird index.php: $body = “home”;

Das Ausgabeergebnis ist: Körper-ID = “”

Irgendwelche Vorschläge, um dies zu beheben?

(Ich habe var_dump($body) erstellt und der Wert ist “home”, also funktioniert die Variable)

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( "https://stackoverflow.com/" ); ?>" 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(); ?>

  • Haben Sie den Vardump an derselben Stelle ausgeführt, an der Sie versuchen, ihn zu wiederholen?

    – Markus B

    31. August 2010 um 1:07 Uhr

Benutzer-Avatar
chuckx

Sie haben es mit einem Variablenbereichsproblem zu tun.

Da die Einbindung der header.php durch die erfolgt get_header() Funktion, die $body Die Variable in der Datei header.php ist im Geltungsbereich dieser Funktion enthalten (dh sie ist eine lokale Variable in der Funktion).

Sie müssen die Variable in der Datei header.php als global deklarieren. Bevor Sie irgendetwas anderes mit der Variable tun, fügen Sie diese Zeile zu header.php hinzu:

global $body;

Ich glaube, dies sollte helfen, das gewünschte Verhalten zu erreichen.

Siehe diese als Referenz:

Gültigkeitsbereich von PHP-Variablen

WordPress – Einstieg in Vorlagen

Eigentlich ist das, was passiert, viel einfacher als das. Die Datei header.php wird vor index.php aufgerufen. Wenn Sie den gesamten HTML-Code löschen und sich nur das PHP ansehen würden, würden Sie dies sehen.

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

Sie versuchen nur, den Wert von wiederzugeben $body bevor es überhaupt eingestellt wurde.

1354130cookie-checkPHP-Variable funktioniert nicht in einer WordPress-Header- und Indexdatei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy