woocommerce_form_field 和隐藏字段
Posted
技术标签:
【中文标题】woocommerce_form_field 和隐藏字段【英文标题】:woocommerce_form_field and hidden fields 【发布时间】:2012-08-09 22:59:35 【问题描述】:我正在尝试向 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;
感谢所有帮助。
【问题讨论】:
链接断开@stevie 【参考方案1】:其实。 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;
这对我有用。
【讨论】:
注意,$after 没有任何值,会抛出一个 PHP 通知作为“未定义变量”。 @BretWeinraub:谢谢。立即删除。【参考方案2】:如果您可以提取所需的信息并将其放入变量中,则可以完全绕过将信息放入表单的需要。只需将信息直接添加到 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 );
【讨论】:
【参考方案3】:我知道你问这个问题已经有一段时间了,但我发现了一些对我有用的东西。通过将某些信息发布到帖子元数据,我能够绕过隐藏字段。
这就是我所做的:
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' );
在我有“您的期望值”的上方,我放置了一个函数,该函数返回一个我需要保存到订单中的数字。
希望这不是我自己的应用程序太具体。
【讨论】:
【参考方案4】:我不确定您是如何添加其他非隐藏自定义字段的,但您可以直接回显 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" />';
【讨论】:
【参考方案5】:您必须在添加过滤器时传递参数.. 像
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;
希望对你有帮助
【讨论】:
以上是关于woocommerce_form_field 和隐藏字段的主要内容,如果未能解决你的问题,请参考以下文章