将变量添加到跨不同文件的操作/函数(WooCommerce)

时间:2016-11-04 作者:Benmay

我正在使用woocommerce,它运行良好。例如,在相关产品的模板上,您会发现:

<?php woocommerce_product_loop_start(); ?>
这将调用循环开始。php。是否有可能向这个函数添加一些变量,我可以在循环开始时调用这些变量。php?

例如:woocommerce\\u product\\u loop\\u start($测试)

和循环启动。php我可以做“echo$测试”。我也尝试过全局变量,但没有成功。

内容循环调用“wc\\u get\\u template\\u part(\'内容\',\'产品\');”也是如此。我可以在上面添加一些变量吗?

非常感谢你。

2 个回复
SO网友:kovshenin

不是真的。

在WordPress中加载模板的任何内容最终都是include()require() 并且只有调用者函数作用域(当然还有全局作用域)中的变量才会传递到包含的文件:

function foo() {
    $bar = 1;
    include( \'/path/to/template.php\' );
}

$baz = 2;
foo();

// template.php:
echo $bar; // 1
echo $baz; // undefined
因此,要使您所描述的工作正常,您必须更改Core的行为load_template() 执行实际require(). 但还有其他方法。以下是一些:

全局范围(没有人喜欢全局范围):

$GLOBALS[\'myvar\'] = 1; // will be accessible from anywhere
静态类属性:

class My_Class {
    public static $myvar;
}

My_Class::$myvar = 1;
My_Class::$myvar 如果在加载模板之前声明了类并更改了静态变量,则可以在模板中访问。这几乎就像使用全局范围,但更干净。

希望有帮助!

SO网友:Benoti

您不能向函数中添加参数,但可以创建自己的参数。当“核心”功能处于function_exists (loop\\u start和loop\\u end就是这种情况)您可以在插件或主题函数中用自己的函数重写主函数。php。

if ( ! function_exists( \'woocommerce_product_loop_start\' ) ) {

/**
 * Output the start of a product loop. By default this is a UL.
 *
 * @param bool $echo
 * @return string
 */
    function woocommerce_product_loop_start( $echo = true ) {
        ob_start();
        $GLOBALS[\'woocommerce_loop\'][\'loop\'] = 0;
        wc_get_template( \'loop/loop-start.php\' );
        if ( $echo )
            echo ob_get_clean();
        else
            return ob_get_clean();
    }
} 
如您所见,此函数仅查找循环开始的模板文件。所以有一个最简单的方法:

您可以使用模板层次结构加载自己的文件。可以通过将此模板复制到主题/woocommerce/循环/循环开始来覆盖此模板。php中,添加do\\u操作以检索参数并进行作业。

相关推荐

Global variables and re-use

目前我正在编写WordPress插件。我会尝试在不同的页面上重用函数中的变量。假设我将创建如下函数:function test() { global $hello; $hello = \'hello world\'; } add_action( \'wp_head\', \'test\' ); 我现在可以在其他页面上执行以下操作:echo $hello; 这对我很有用,因为我可以通过插件获取课程设置等信息$course_settings, 无