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 和隐藏字段的主要内容,如果未能解决你的问题,请参考以下文章

显式intent和隐式intent

显示等待和隐式等待

selenium显示等待和隐式等待的区别

(转载)Android理解:显式和隐式Intent

结合 semacodes 和隐写术?

欧拉方法(显式和隐式)