将过滤后的计费电话保存到 WooCommerce 中的管理员用户配置文件

我在过去几天读到的所有内容都表明,如果我想在 user-edit.php (用户管理后端)中保存字段,我应该使用 & 钩子(并且我在这个问题中不包括验证钩子edit_user_profile_update...... personal_options_update

在法典中,他们指出:

考虑一个例子:

update_user_meta($user_id, 'custom_meta_key', $_POST['custom_meta_key']);

$_POST请务必确保为数据密钥和实际用户元密钥指定不同的密钥名称。如果您对两者使用相同的键,Wordpress 出于某种原因会清空该键下发布的值。
因此,您总是会得到一个空值,$_POST['custom_meta_key']因此请在 html 输入元素的 name 属性中更改它并附加后缀。将其更改为$_POST['custom_meta_key_data'],它将正确传递数据。

但是,考虑到我想向现有billing_phone字段添加验证,我不知道如何创建所述“ custom_meta_key_data”(例如:'_billing_phone'、 或'prefix_billing_phone'),然后将值输入到所述 prefix_billing_phone 中,然后转换为'billing_phone'via update_user_meta()

我在下面提供了我的基本代码,我已经在互联网上搜索了两天的解决方案,但我找不到解决方法。

此外,str_replace()不执行操作,这让我查看内部,user-edit.php并且注释支持上面引用的注释,在点击更新和配置文件重新加载之间,它将每个变量保存为_billing_(前缀“_”)并记录原始值(前面的 if 语句/下面的代码)并保存该值 - 不是我条件/尝试验证的内容。我不知道如何复制它,以便我可以简单地验证我的字段......

add_action( 'personal_options_update', 'audp_save_user_account_fields' );

add_action( 'edit_user_profile_update', 'audp_save_user_account_fields' ); 


function audp_save_user_account_fields( $user_id ) {

    

    /* Input Value: "0412 345 678"

     * SHOULD Become: "0412345678"

     */

    $billing_phone = str_replace( array( ' ', '(', ')' ), '', $_POST['billing_phone'] );

    

    if ( !empty( $_POST['billing_phone'] ) && preg_match( '/^04[0-9]{8}$/D', $billing_phone ) ) {

        

        $billing_phone_query = get_users( array( 

            'meta_key' => 'billing_phone',

            'meta_value' => $billing_phone, 

        ) );

        

        foreach ( $billing_phone_query as $query ) {

            

            if ( $user_id == $query->ID ) {

                

                /* This value ($billing_phone) should be eg: "0412345678"

                 * but remains "0412 345 678" 

                 */

                update_user_meta( $user_id, 'billing_phone', $billing_phone );

            

            }

        

        }

    

    }


}


呼唤远方
浏览 124回答 1
1回答

跃然一笑

更新现在要过滤仅保留数字的电话号码字符串,您可以更好地preg_replace()使用str_replace().下面,帐单电话号码在保存之前将被过滤:WordPress 管理员用户仪表板我的帐户地址 编辑帐单地址下订单后(保存数据之前)代码:// In Wordpress user profile (increased hook priority)add_action( 'personal_options_update', 'save_user_billing_phone_fields', 999999 );add_action( 'edit_user_profile_update', 'save_user_billing_phone_fields', 999999 );function save_user_billing_phone_fields( $user_id ) {    $field_key = 'billing_phone';    if( isset($_POST[$field_key]) && ! empty($_POST[$field_key]) ) {        // Filtering billing phone (removing everything else than numbers)        $billing_phone = preg_replace( '/[^0-9]/', '', sanitize_text_field($_POST[$field_key]) );        // Update the billing phone        update_user_meta( $user_id, 'billing_phone', $billing_phone );    }}// On My account > edit addresses > Billingadd_action( 'woocommerce_process_myaccount_field_billing_phone', 'filter_my_account_billing_phone_fields' );function filter_my_account_billing_phone_fields( $value ) {    return preg_replace( '/[^0-9]/', '', $value );}// On order submissionadd_action( 'woocommerce_checkout_posted_data', 'wc_checkout_posted_data_filter_callback' );function  wc_checkout_posted_data_filter_callback( $data ) {    $field_key = 'billing_phone';    if( isset($data[$field_key]) ) {        // Filtering billing phone (removing everything else than numbers)        $data[$field_key] = preg_replace( '/[^0-9]/', '', $data[$field_key] );    }    return $data;}代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。
打开App,查看更多内容
随时随地看视频慕课网APP