我使用WooCommerce标签动态显示有关可用变量产品的标签:
foreach ($variant_attributes as $variant_id => $variant_attribute) {
$tabs[$variant_attribute['attribute_art']] = [
'title' => $variant_attribute['attribute_art'],
'priority' => 16,
'callback' => 'custom_tab_content_'.$variant_attribute['attribute_art']
];
}
由于Woocommerce选项卡需要回调以在选项卡中显示数据,我需要像我在此示例中尝试的那样动态创建函数,但当然这不起作用。
如何在foreach循环中创建回调?
例如,如果$variant_attribute['attribute_art']
为variant_1
,我需要的功能称为custom_tab_content_variant_1
。
感谢您的帮助!
修改
解决方案是:
foreach ($variant_attributes as $variant_id => $variant_attribute) {
$tabs[$variant_attribute['attribute_art']] = [
'title' => $variant_attribute['attribute_art'],
'priority' => 16,
'variant_id' => $variant_id,
'callback' => function($arg, $params) {
echo $params['variant_id'];
}
];
}
答案 0 :(得分:1)
这里我不能把它放在评论中。
foreach ($variant_attributes as $variant_id => $variant_attribute) {
$tabs[$variant_attribute['attribute_art']] = [
'title' => $variant_attribute['attribute_art'],
'priority' => 16,
'callback' => function($arg1){
//do stuff
}
];
}
当然,如果功能不同,那么你别无选择,只能单独编写它们。
然而,即使不是这样,你也应该以传统的方式来做。
如果它在一个班级
class foo{
public function register(){
foreach ($variant_attributes as $variant_id => $variant_attribute) {
$tabs[$variant_attribute['attribute_art']] = [
'title' => $variant_attribute['attribute_art'],
'priority' => 16,
'callback' => [$this, 'action']
];
}
}
public function action($arg1){
}
}
见第一个创建的(n)函数全部相同,第二个创建1个函数/方法使用它(n)次
或者你可以手工编写它们,并像你一样循环分配它们。你不能/不应该在循环中创建函数。
function custom_tab_content_variant_1($arg1){
}
最后一种方法,创建1个函数使用它1次,或者你可以手动创建(n)函数并每次使用它们。