自定义Woocommerce模板my-account / form-edit-addresses

时间:2017-08-13 00:18:37

标签: php wordpress forms woocommerce hook-woocommerce

/my-account/edit-addresses/

的地址区域存在一些问题
  1. 我想自定义模板form-edit-addresses.php中的表单字段。例如,我想更改所有字段,再单独将一些字段放在不同的类中:
  2. <p class="form-row form-row-first validate-required" id="billing_first_name_field" data-priority="10">
    <label for="billing_first_name" class="">First name <abbr class="required" title="required">*</abbr></label>
    <input type="text" class="input-text " name="billing_first_name" id="billing_first_name" placeholder="" value="Name"></p>
    

    <div class="form-group form-group-default input-group">
    <div class="form-input-group">
    <label for="billing_first_name" class="">Company</label>
    <input type="text" class="input-text " name="billing_first_name" id="billing_first_name" placeholder="" value="Name">
    </div>
    

    请注意,上面这些只是从inspect中获取的HTML标记,而不是使表单正常工作的正确字段。我可以处理 - 它只是找到或替换字段。

    This is the current Layout that is not very adaptable to my needs

    This is what I require the form to look like using the tags above

    1. 我想要完成的第二件事是在/my-account/edit-addresses/网址/ Slug而不是/my-account/edit-addresses/billing

    2. 中添加此表单
    3. 第三种方法是在提交重定向到/my-account/而不是/my-account/edit-addresses/时制作表单并包含任何Woocommerce通知

    4. 最后一点是删除First Name Last Name Email Phone字段。我假设将通过完成步骤1并删除不需要的表单字段来轻松修复。

    5. 非常感谢任何时候寻找解决方案。

      干杯

2 个答案:

答案 0 :(得分:2)

您无法将<p>标记(删除所有现有属性+值)更改为<div>,因为这肯定会破坏某些进程,因为此处启用了特定的woocommerce javascript ...

现在,您可以使用 woocommerce_form_field_args 过滤器挂钩在所有<p>标记上全局更改,然后您可以删除所有字段都需要行为,因此 <abbr class="required" title="required">*</abbr> 将被删除。

以下是代码:

add_filter( 'woocommerce_form_field_args', 'custom_wc_form_field_args', 10, 3 );
function custom_wc_form_field_args( $args, $key, $value ){
    // Only on My account > Edit Adresses
    if( is_wc_endpoint_url( 'edit-account' ) || is_checkout() ) return $args;

    $args['class'] = array('form-input-group');
    $args['required'] = false;

    return $args;
}

因此,您必须管理CSS才能进行设计更改。

此数组中的所有可用参数$ args为:

'type'              # @ string
'label'             # @ string
'description'       # @ string
'placeholder'       # @ string
'maxlength'         # @ boolean
'required'          # @ boolean
'autocomplete'      # @ boolean
'id'                # => $key (argument)
'class'             # @ array
'label_class'       # @ array
'input_class'       # @ array
'return'            # @ boolean
'options'           # @ array
'custom_attributes' # @ array
'validate'          # @ array
'default'           # @ string
'autofocus'         # @ string
'priority'          # @ string

使用woocommerce_form_field_{field_type}过滤器挂钩,您可以根据字段类型单独访问字段设置。这个钩子有4个可用的参数:$field$key$args$value ......

答案 1 :(得分:1)

我已经找到了问题的第2,第3和第4部分 - 以防其他人正在寻找......

第2部分是将sepEndBy1添加到form-edit-address.php

我将其添加到edit-address模板

my-address.php

要执行第3部分并从<?php // get the user meta $userMeta = get_user_meta(get_current_user_id()); // get the form fields $countries = new WC_Countries(); $billing_fields = $countries->get_address_fields( '', 'billing_' ); $shipping_fields = $countries->get_address_fields( '', 'shipping_' ); ?> <!-- billing form --> <?php $load_address = 'billing'; $page_title = __( 'Billing Address', 'woocommerce' ); ?> <form action="/my-account/edit-address/billing/" class="edit-account" method="post"> <h2><?php echo apply_filters( 'woocommerce_my_account_edit_address_title', $page_title ); ?></h2> <?php do_action( "woocommerce_before_edit_address_form_{$load_address}" ); ?> <?php foreach ( $billing_fields as $key => $field ) : ?> <?php woocommerce_form_field( $key, $field, $userMeta[$key][0] ); ?> <?php endforeach; ?> <?php do_action( "woocommerce_after_edit_address_form_{$load_address}" ); ?> <p> <input type="submit" class="button" name="save_address" value="<?php esc_attr_e( 'Save Address', 'woocommerce' ); ?>" /> <?php wp_nonce_field( 'woocommerce-edit_address' ); ?> <input type="hidden" name="action" value="edit_address" /> </p> </form> 重定向提交,我将以下内容添加到我的主题form-edit-address.php

functions.php

要执行第4部分并从function action_woocommerce_customer_save_address( $user_id, $load_address ) { wp_safe_redirect(wc_get_page_permalink('myaccount')); exit; }; add_action( 'woocommerce_customer_save_address', 'action_woocommerce_customer_save_address', 99, 2 ); 中删除字段,我将以下内容添加到我的主题form-edit-address.php

functions.php

非常感谢对此问题其他部分的任何帮助。