3

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

woocommerce-template.php中,隐藏字段属于这个 switch case:

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

5 回答 5

7

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

第三个是优先级。

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;
}

这对我有用。

于 2014-09-02T11:36:14.397 回答
1

如果您可以提取所需的信息并将其放入变量中,则可以完全绕过将信息放入表单的需要。只需将信息直接添加到 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 );
}
于 2016-06-08T02:59:21.267 回答
0

我知道你问这个问题已经有一段时间了,但我发现了一些对我有用的东西。通过将某些信息发布到帖子元数据,我能够绕过隐藏字段。

这就是我所做的:

add_action( 'woocommerce_checkout_update_order_meta', 'your_hidden_data' );

function your_hidden_data( $order_id ) {
    /*
      Put your normal field saves here
    */

    //Your hidden fields
    update_post_meta( $order_id, 'YOUR DESIRED KEY NAME', 'YOUR DESIRED VALUE' );
}

在上面我有“您的期望值”的地方,我放置了一个函数,该函数返回一个我需要保存到订单中的数字。

希望这不是我自己的应用程序太具体。

于 2014-05-07T15:00:34.117 回答
-1

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

IE

添加一个钩子:

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" />';
}
于 2013-02-07T20:10:16.080 回答
-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;
    }
}

我希望它有帮助

于 2014-06-23T14:15:29.543 回答