Wordpress - 使变量可用于所有主题文件(没有全局变量)
Wordpress - make variables available for all theme files (without 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 );
我的意思是,你能告诉我正确的方法吗?谢谢
编写一个 class,声明一个 class 的全局对象,将所有变量保存为 class 的 attribute/property。
现在从任何地方获取全局对象。
所有变量都存储在其中。
呜呜呜呜你把苹果和桃子混在一起了。 WordPress Hooks、Actions 和 Filters 用于按照您想要的方式修改 WordPress 核心,它不是为了在模板中的某处存储任何数据而构建的。
一种方法是将值简单地存储在 WordPress 安装的数据库中。为此,您需要熟悉 "Nonce" 函数,这是用于在 WP 数据库中存储内容的安全机制。
有数以千计的教程展示了如何做到这一点。
如果您只想存储一些数值或短字符串,您可以使用 HTML data-* 对象来存储一些数据,当 php 将其吐回时。
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
而不是设置 class 属性。
我正在开发一个 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 );
我的意思是,你能告诉我正确的方法吗?谢谢
编写一个 class,声明一个 class 的全局对象,将所有变量保存为 class 的 attribute/property。
现在从任何地方获取全局对象。
所有变量都存储在其中。
呜呜呜呜你把苹果和桃子混在一起了。 WordPress Hooks、Actions 和 Filters 用于按照您想要的方式修改 WordPress 核心,它不是为了在模板中的某处存储任何数据而构建的。
一种方法是将值简单地存储在 WordPress 安装的数据库中。为此,您需要熟悉 "Nonce" 函数,这是用于在 WP 数据库中存储内容的安全机制。
有数以千计的教程展示了如何做到这一点。
如果您只想存储一些数值或短字符串,您可以使用 HTML data-* 对象来存储一些数据,当 php 将其吐回时。
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
而不是设置 class 属性。