Wordpress - 使变量可用于所有主题文件(没有Globals)

时间:2016-08-17 14:32:25

标签: php wordpress global-variables globals

我正在开发一个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 );

我的意思是,你能用正确的方法向我说话吗?感谢。

3 个答案:

答案 0 :(得分:1)

编写一个类,声明该类的全局对象,将所有变量保存为该类的属性/属性。

现在从任何地方获取全局对象。

您将所有变量存储在其中。

答案 1 :(得分:0)

你不是把桃子和桃子混合在一起。 WordPress Hooks,Actions和Filters可以按照您想要的方式修改WordPress核心,而不是用于在模板中的某个位置存储任何数据。

一种方法是将值存储在WordPress安装的数据库中。要做到这一点,你需要熟悉" Nonce" function,是在WP数据库中存储东西的安全机制。

有一些hundrets和成千上万的教程,展示了如何做到这一点。

如果你只想存储一些数值或短字符串,你可以使用HTML data- *对象存储一些数据,当php吐回它时。

答案 2 :(得分:-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超全局中设置变量(因为大多数变量看起来特定于会话){{ 1}}而不是设置类属性。