【问题标题】:woocommerce_form_field and hidden fieldswoocommerce_form_field 和隐藏字段
【发布时间】: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

标签: forms hook add-filter woocommerce


【解决方案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;
            }
        }
        

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-31
          • 2011-03-15
          • 1970-01-01
          • 2011-01-02
          • 2012-05-17
          • 1970-01-01
          • 2020-02-01
          相关资源
          最近更新 更多