范围:使用函数中定义的变量

时间:2010-12-07 15:36:58

标签: php wordpress variables global-variables scope

我在functions.php文件中有一个定义某些变量的函数:

add_action( 'the_post', 'paginate_slide' );

function paginate_slide( $post ) {

    global $pages, $multipage, $numpages;

    if( is_single() && get_post_type() == 'post' ) {

    $multipage = 1;
    $id = get_the_ID();
    $custom = array();
    $pages = array();
    $i = 1;

    foreach( get_post_custom_keys() as $key )
        if ( false !== strpos( $key, 'slide' ) )
            $custom[$key] = get_post_meta( $id, $key, true);

    while( isset( $custom["slide{$i}-title"] ) ) {

        $page = '';
        $tzTitle = $custom["slide{$i}-title"];
        $tzImage = $custom["slide{$i}-image"];
        $tzDesc = $custom["slide{$i}-desc"];
        $tzEmbed = $custom["slide{$i}-embed"];

        $page = "<h2>{$tzTitle}</h2><img src='{$tzImage}' />";
        $pages[] = $page;
        $i++;
    }

    $numpages = count( $pages );
    }
}

我想在template.php文件中输出一些这样的变量,如:<?php echo $tzDesc; ?>,但我似乎无法让它工作。根据我对variables scope的理解,为了在另一个地方调用这些变量,我需要在全局范围内定义它们,并像在$pages, $multipage, $numpages;中那样将它们称为全局函数。这应该允许我将这些变量插入我需要的地方。问题是当我将它们从函数中取出并在全局范围内定义它们时,整个函数停止工作。

我如何构建这个,以便我可以在网站的任何地方调用<?php echo $tzDesc; ?>并让它回显定义的信息?

我不知道这是否重要,但这是在WordPress网站上。

1 个答案:

答案 0 :(得分:2)

如果您仍想使用<?php echo $tzDesc; ?>,则需要将$tzDesc定义为全局变量。但是,我不建议这样做,因为全局变量被认为是编程实践。

更好的解决方案是将paginate_slide()添加$tzDesc(和其他值)添加到$post对象。这样,只要您调用the_post(),就可以访问这些变量。如果你走这条路线,一定要命名变量:

$post->ns_tzDesc = $tzDesc;