我正在使用wordpress和woocommerce(电子商务插件)来定制购物车。在我的functions.php中,我将数据存储在一个变量中,如下所示:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$newVar = $value['data']->price;
}
}
我需要能够在不同的函数中使用$newVar
,这样我才能在页面的不同区域回显结果。例如,如果我有以下功能,我将如何在其中使用$newVar
?
add_action( 'another_area', 'function_name' );
function function_name() {
echo $newVar;
}
我该怎么做?
答案 0 :(得分:7)
您可以将变量设为全局:
function add_custom_price( $cart_object ) {
global $newVar;
foreach ( $cart_object->cart_contents as $key => $value ) {
$newVar = $value['data']->price;
}
}
function function_name() {
global $newVar;
echo $newVar;
}
或者,如果$newVar
已在全球范围内可用,您可以这样做:
function function_name($newVar) {
echo $newVar;
}
// Add the hook
add_action( 'another_area', 'function_name' );
// Trigger the hook with the $newVar;
do_action('another_area', $newVar);
答案 1 :(得分:4)
你为什么不能在foreach循环中调用你的函数?
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$newVar = $value['data']->price;
function_name($newVar);
}
}
答案 2 :(得分:3)
您应该在函数中使用return $ variable:
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$newVar = $value['data']->price;
}
return $newVar;
}
function function_name($newVar) {
//do something with $newVar
}
并像这样使用:
$variable = add_custom_price( $cart_object );
$xxx = function_name($variable);
更新:
看看@ChunkyBaconPlz说$ newVar应该是一个数组:
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$newVar[] = $value['data']->price;
}
return $newVar;
}
答案 3 :(得分:0)
这是一个范围问题。您需要首先在函数外部实例化(创建)$ newVar。然后它将由您的其他功能查看。
您可以看到,范围决定了可以看到其他对象的对象。如果在函数中创建变量,则只能在该函数中使用它。一旦函数结束,该变量就被消除了!
所以要修复,只需在创建函数之前创建“$ newVar”,你应该很高兴。
答案 4 :(得分:0)
即使它定义的全局它在调用其他函数时也不起作用,如果我们在其他函数中调用函数它似乎正在工作。
<?php
function one() {
global $newVar;
$newVar = "hello";
}
function two() {
one();
global $newVar;
echo $newVar;
}
two();
?>