woocommerce_form_field和隐藏字段

时间:2012-08-13 17:06:27

标签: forms hook add-filter woocommerce

我正在尝试向WooCommerce结帐添加自定义字段,并且隐藏字段似乎没有输出。

woocommerce-template.php中,隐藏字段属于此切换案例:

default :
    $field = apply_filters( 'woocommerce_form_field_' . $args['type'], '', $key, $args, $value  );
    break;
}

如何添加输出隐藏字段的woocommerce_form_field_hidden操作。我尝试了多种不起作用的东西。最终,我无法弄清楚如何传递函数参数。

add_action('woocommerce_form_field_hidden', 'my_form_field_hidden');
if ( ! function_exists('my_form_field_hidden') ) {
    function hp_form_field_hidden() {

        $field = '<p class="form-row ' . implode( ' ', $args['class'] ) .'" id="' . $key . '_field">
            <input type="hidden" class="input-hidden" name="' . $key . '" id="' . $key . '" placeholder="' . $args['placeholder'] . '" value="'. $value.'" />
            </p>' . $after;

        return $field;
    }
}

感谢所有帮助。

4 个答案:

答案 0 :(得分:6)

实际上。 add_filter函数的最后一个paramatert是函数的参数个数。

第三个是优先事项。

add_filter('woocommerce_form_field_hidden', 'wcds_form_field_hidden', 999, 4);

function wcds_form_field_hidden($no_parameter, $key, $args, $value) {

    $field = '<p class="form-row ' . implode( ' ', $args['class'] ) .'" id="' . $key . '_field">
        <input type="hidden" class="input-hidden" name="' . $key . '" id="' . $key . '" placeholder="' . $args['placeholder'] . '" value="'. $value.'" />
        </p>';

    return $field;
}

这对我有用。

答案 1 :(得分:0)

如果您可以提取所需的信息并将其放入变量中,则可以完全避免将信息放入表单中。只需将信息直接添加到update_post_meta。

我需要添加一个存储在COOKIE中的值,最初设置为将其作为隐藏字段添加到表单上,但最终会这样做:

/**
 * Add the hidden referral info field to the checkout
 */
add_action( 'woocommerce_checkout_update_order_meta', 'your_hidden_data' );

function your_hidden_data( $order_id ) {
/*
  Put your normal field saves here if needed
*/
$cookie_name1 = $_COOKIE['ref_src']; //Get my Cookie and Assign it
//Your hidden fields
update_post_meta( $order_id, 'Referral_Source', $cookie_name1 );
}

答案 2 :(得分:-1)

我不确定你是如何添加其他非隐藏自定义字段的,但你可以只回显html。

添加一个钩子:

add_action('woocommerce_before_checkout_billing_form', array(&$this, 'custom_before_checkout_billing_form') );

然后在你自己的函数中做这样的事情:

function custom_before_checkout_billing_form($checkout) {

    echo '<input type="hidden" class="input-hidden" name="test" id="test" placeholder="test" value="test" />';
}

答案 3 :(得分:-1)

添加过滤器时必须传递参数..类似

add_filter函数中的第三个参数是过滤器接收的参数数量。

最后一个参数是优先级......

add_filter('woocommerce_form_field_hidden', 'my_form_field_hidden', 4 , 15);

现在你必须在过滤器功能中设置参数。

if ( ! function_exists('my_form_field_hidden') ) {

    function hp_form_field_hidden($no_parameter, $key, $args, $value) {

        $field = '<p class="form-row ' . implode( ' ', $args['class'] ) .'" id="' . $key . '_field">
            <input type="hidden" class="input-hidden" name="' . $key . '" id="' . $key . '" placeholder="' . $args['placeholder'] . '" value="'. $value.'" />
            </p>' . $after;

        return $field;
    }
}

我希望它有所帮助