总的来说,我想要这个:
function parent () {
$foo = 'something';
do_action ('hook');
}
function child () {
echo $foo;
}
add_action ('hook','child');
特别是我想打印WooCommerce产品$attributes
变量,该变量用于进行属性选择下拉菜单,以了解数组中的内容,然后再处理此数据。代码是:
function 'print_attributes' () {
global $woocommerce, $attributes;
print '<pre>';
print_r ($attributes);
print '</pre>';
}
add_action('woocommerce_before_add_to_cart_form','print_attributes');
<pre>
标签打印在产品页面上,但$attributes
为空。
据我了解,我的代码也要等到我在父函数中声明global $attributes
后才能起作用,这意味着修改了我想要避免的WooCommerce模板文件。
$attributes
在variable.php模板-https://github.com/woocommerce/woocommerce/blob/master/templates/single-product/add-to-cart/variable.php#L22中被调用,该钩子稍后放置在几行-https://github.com/woocommerce/woocommerce/blob/master/templates/single-product/add-to-cart/variable.php#L26中。
有什么方法可以在不修改WooCommerce代码的情况下访问变量?
我了解我可以通过子主题覆盖模板,但是我很想知道这是否可以通过钩子完成,因为我只是在学习PHP和Wordpress。
答案 0 :(得分:0)
使用您的演示代码:
function parent () {
$foo = 'something';
do_action ('hook', $foo);
}
function child ($foo) {
echo $foo;
}
add_action ('hook','child');
您可以将变量传递到钩子中,默认情况下,如果需要更多使用,钩子会将第一个变量传递给执行的函数:
function parent () {
$foo = 'something';
$bar = 'something';
$baz = 'something';
do_action ('hook', $foo, $bar, $baz);
}
function child ($foo, $bar, $baz) {
echo $foo;
echo $bar;
echo $baz;
}
add_action ('hook','child', 10, 3);
在此处找到更多信息:https://developer.wordpress.org/reference/functions/add_action/