7

我正在使用 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;
}

我怎样才能做到这一点?

4

5 回答 5

12

您可以将变量设为全局变量:

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);
于 2013-08-29T17:57:21.523 回答
4

为什么你不能从你的 foreach 循环中调用你的函数?

function add_custom_price( $cart_object ) {
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $newVar = $value['data']->price;
        function_name($newVar);
    }
}
于 2013-08-29T17:53:44.463 回答
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;
}
于 2013-08-29T17:55:40.330 回答
1

即使它定义的全局它在调用其他函数时不起作用但是如果我们在其他函数中调用函数它似乎正在工作。

<?php

function one() {
    global $newVar;

        $newVar = "hello";

}

function two() {
    one();
    global $newVar;

    echo $newVar;
}
 two();

?>
于 2015-02-21T06:58:35.500 回答
0

这是一个范围问题。您需要先在函数之外实例化(创建)$newVar。然后它将可以通过您的其他功能查看。

你看,范围决定了哪些对象可以被其他对象看到。如果您在函数中创建变量,则它只能在该函数中使用。一旦函数结束,该变量就被消除了!

因此,要修复,只需在创建函数之前创建“$newVar”,就可以了。

于 2013-08-29T17:56:52.480 回答