2016-08-17 105 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