2012-08-13 96 views
2

我想自定义字段添加到WooCommerce结帐,有似乎没有输出隐藏字段。woocommerce_form_field和隐藏字段

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

所有帮助表示赞赏。

+1

失效链接@stevie – 2016-08-17 11:46:16

回答

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

上面我哪里有“您的期望值,我放置在返回我需要保存的顺序数的函数

但愿这不是太具体的我自己的应用程序。

-1

你,当你添加过滤器来传递参数..喜欢的东西

在add_第三个参数过滤功能是过滤器接收的参数个数。

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

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

现在你必须设置paramteres的过滤功能。

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

我希望它能帮助

5

其实。该功能的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; 
} 

这对我有效。

+0

我也工作了。 – 2017-06-27 11:14:30

+0

请注意,$ after没有任何价值,并会将PHP通知作为“未定义变量”进行投放。 – 2017-06-27 14:18:10

+1

@BretWeinraub:谢谢。现在删除它。 – tormorten 2017-10-19 10:16:33

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