动态生成函数和挂钩

时间:2014-06-17 作者:user54312

我试图找到是否可以动态生成函数和挂钩。所有函数都做相同的事情,所有挂钩本质上都是相同的。

下面是一个挂钩/函数组合的示例:

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\' )
            ) 
        );
    }
}

1 个回复
SO网友:user54312

由于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\' )
            ) 
        );
    }
}

结束

相关推荐

SQL-通过PhpMyAdmin删除所有用户并创建具有管理员角色的新用户

通过wp admin panel可以很容易地删除所有用户并添加具有管理角色的新用户。但要求是通过SQL实现这一点。我可以特鲁克wp_users 和wp_usermeta 表以删除所有用户。但当我在wp_users 使用虚拟数据,然后通过wp admin登录,然后显示登录不正确。为什么?如果您能告诉我删除所有用户并添加具有管理员角色的用户的正确方法,我将非常感谢您。