2010-12-07 31 views
1

我有一個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網站。

回答

2

無論如何,如果您想要使用<?php echo $tzDesc; ?>,您需要將$tzDesc定義爲全局變量。不過,我不推薦這樣做,因爲全局變量被認爲是編程實踐。

更好的解決方案是讓paginate_slide()$tzDesc(和其他值)添加到$post對象。這樣,您可以隨時撥打the_post()訪問這些變量。如果你走這條路線,一定要命名空間變量:

$post->ns_tzDesc = $tzDesc; 
+0

將它們添加到$ post對象聽起來像一個更好的解決方案。我會怎麼做?說實話,我不確定$ post是在哪裏定義的。如果有幫助,這是在Wordpress網站上。 – mattz 2010-12-07 15:53:59