2016-08-17 39 views
0

我正在開發一個Wordpress主題,我試圖存儲我的一些變量在函數中重用它在我的主題文件中,而不寫數百次同樣的變量,並且沒有使它們全球。我讀過這是一個不好的做法。WordPress的 - 使變量可用於所有主題文件(沒有全局變量)

現在我正在使用add_action,但是沒有結果。有在我functions.php

add_action('run_pms_variables', 'pms_variables_function'); 
function pms_variables_function ($uid) { 
    $the_group_uid = isset($_COOKIE["v_group_id"]) && !empty($_COOKIE["v_group_id"]) ? trim(strip_tags($_COOKIE["v_group_id"])) : "";  
    $session_detail = vpb_get_the_user_detail($uid); 
    $session_username = strlen($session_detail[0]) > 40 ? ucfirst(substr($session_detail[0],0,40)) : ucfirst($session_detail[0]); 
    $session_uid = $session_detail[1]; 
    $session_email = $session_detail[2]; 
    $session_photo = $session_detail[3]; 
    $session_country = $session_detail[4]; 
    //$session_usernames = explode(' ', $session_detail[0]); 
    $session_firstname = get_user_meta($uid,'first_name', true); 
    $session_lastname = get_user_meta($uid,'last_name', true); 
} 

,在我的文件中使用像最終:

do_action('run_pms_variables', $uid); 

我的意思是,你可以稱呼我爲正確的方法?謝謝。

回答

1

編寫一個類,聲明該類的全局對象,將所有變量保存爲該類的屬性/屬性。

現在從任何地方都可以得到全局對象。

你有所有的變量存儲在裏面。

+0

我正在這樣。謝謝。 – XiLab

1

Uuuuhmm你正在混合蘋果與桃子。 WordPress鉤子,動作和過濾器是按照你想要的方式修改WordPress核心的方式,而不是在你的模板中存儲任何數據的地方。

做到這一點的一種方法是簡單地將值存儲在WordPress安裝的數據庫中。要做到這一點,您需要熟悉「Nonce」功能,這是用於在WP的數據庫中存儲內容的安全機制。

有胡言亂語和數以千計的教程顯示如何做到這一點。

如果您只想存儲一些數值或短字符串,則可以使用HTML數據對象來存儲一些數據,當php吐出來。

-1
add_action('run_pms_variables', 'pms_variables_function'); 
function pms_variables_function ($uid) { 
    class GlobalVariables{ 
    function __construct ($uid){ 
     $this->the_group_uid = isset($_COOKIE["v_group_id"]) && !empty($_COOKIE["v_group_id"]) ? trim(strip_tags($_COOKIE["v_group_id"])) : ""; 
     $this->session_detail = vpb_get_the_user_detail($uid); 
      $this->session_username = strlen($session_detail[0]) > 40 ? ucfirst(substr($session_detail[0],0,40)) : ucfirst($session_detail[0]); 
     $this->session_uid = $session_detail[1]; 
     $this->session_email = $session_detail[2]; 
     $this->session_photo = $session_detail[3]; 
     $this->session_country = $session_detail[4]; 
     //$session_usernames = explode(' ', $session_detail[0]); 
     $this->session_firstname = get_user_meta($uid,'first_name', true); 
     $this->session_lastname = get_user_meta($uid,'last_name', true); 
     }  
    } 
    return GlobalVariables($uid); 
} 

//and to access: 

$global_variables = do_action('run_pms_variables', $uid); 

echo $global_variables->the_group_uid; 

作爲一個側面說明,要定義全局變量是可以在任何地方訪問的變量,其他選項包括在$_SESSION超級全局設置變量(如大多數你的變量看會話特定)的pms_variables_function而不是內部設置類屬性。

+0

在WordPress中,'do_action()'不返回任何內容,所以這段代碼無法工作。 – trysmudford

+0

錯誤的方式,做動作返回值? – Mickey