我试图找到是否可以动态生成函数和挂钩。所有函数都做相同的事情,所有挂钩本质上都是相同的。
下面是一个挂钩/函数组合的示例:
add_action( \'woocommerce_single_product_summary\', \'cx_inputKVA_show\', 5 );
function cx_inputKVA_show() {
global $product;
// Do not show this on variable products
if ( $product->product_type <> \'variable\' ) {
$inputKVA = get_post_meta( $product->id, \'cx_inputKVA\', true );
if ( $inputKVA <> \'\' ) {
echo \'<div class="woocommerce_msrp">\';
_e( \'Input KVA: \', \'woocommerce\' );
echo \'<span class="woocommerce-cx_inputKVA">\' . _e( $inputKVA ) . \'</span>\';
echo \'</div>\';
}
}
}
我想使用如下数组:
$fieldset = array(
array(
1 => \'slug\',
2 => \'title\'
)
array(
1 => \'slug\',
2 => \'title\'
)
);
然后使用
foreach()
循环为每个嵌套数组生成3个挂钩和3个函数。以前,我只是分别编写每个项目,但现在我需要生成23个项目,代码太多,太乱,无法更改。
它会使钩子像:
add_action( \'woocommerce_single_product_summary\', \'cx_[plug]_show\', 5 );
功能如下
function cx_inputKVA_show() {
global $product;
// Do not show this on variable products
if ( $product->product_type <> \'variable\' ) {
$[plug] = get_post_meta( $product->id, \'cx_[plug]\', true );
if ( $[plug] <> \'\' ) {
echo \'<div class="woocommerce_msrp">\';
_e( \'[title]: \', \'woocommerce\' );
echo \'<span class="woocommerce-cx_[plug]">\' . _e( $[plug] ) . \'</span>\';
echo \'</div>\';
}
}
}
答案------------------由于Milo是个天才,我只需在函数内部的数组中循环,而不是尝试为每个项动态生成一个新函数,这样做就简单多了。数组包含“slug”和“title”属性,函数如下:
function cx_product_field() {
global $fieldset;
foreach ( $fieldset as $field ){
woocommerce_wp_text_input(
array(
\'id\' => \'cx_\'.$field[\'slug\'],
\'class\' => \'wc_input_text\',
\'label\' => __( $field[\'title\'], \'woocommerce\' )
)
);
}
}