Created
August 1, 2021 21:16
-
-
Save hamidrezayazdani/f9d88801bc1178fb2a7c10a969990991 to your computer and use it in GitHub Desktop.
This snippet convert persian/arabic numbers to english numbers in metadata
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Convert numbers to english | |
* | |
* @param $input | |
* | |
* @return array|string | |
*/ | |
function ywp_convert_numbers_to_latin( $input ): array|string { | |
$arabic = [ '٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠' ]; | |
$persian = [ '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ]; | |
$english = [ '9', '8', '7', '6', '5', '4', '3', '2', '1', '0' ]; | |
$convertedPersianNums = str_replace( $persian, $english, $input ); | |
return str_replace( $arabic, $english, $convertedPersianNums ); | |
} | |
/** | |
* Filter hook on saving user metadata | |
* | |
* @param string $meta_value | |
* @param mixed $meta_key | |
* @param string $object_type | |
* | |
* @return mixed | |
*/ | |
function ywp_convert_user_and_post_metadata_numbers_to_latin( mixed $meta_value, string $meta_key, string $object_type ): mixed { | |
return ywp_convert_numbers_to_latin( $meta_value ); | |
} | |
$user_meta_keys = array( | |
'billing_phone', | |
'billing_postal_code', | |
'billing_address', | |
); | |
foreach ( $user_meta_keys as $meta_key ) { | |
add_filter( "sanitize_user_meta_$meta_key", 'ywp_convert_user_and_post_metadata_numbers_to_latin', 10, 3 ); | |
} | |
$post_meta_keys = array( | |
'_billing_phone', | |
'_customer_mobile', | |
); | |
foreach ( $post_meta_keys as $meta_key ) { | |
add_filter( "sanitize_post_meta_$meta_key", 'ywp_convert_user_and_post_metadata_numbers_to_latin', 10, 3 ); | |
} | |
// Note: This code is compatible with php 8 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
من دارم با این تکه کد، شماره رو توی حساب کاربری میگیرم و ذخیره میکنم:
// نمایش شماره تلفن در قسمت حساب کاربری add_action( 'woocommerce_edit_account_form', 'add_billing_phone_to_edit_account_form' ); // After existing fields function add_billing_phone_to_edit_account_form() { $user = wp_get_current_user(); ?> <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> <label for="billing_phone"><?php _e( 'شماره موبایل', 'woocommerce' ); ?> <span class="required">*</span></label> <input type="text" class="woocommerce-Input woocommerce-Input--phone input-text" name="billing_phone" id="billing_phone" value="<?php echo esc_attr( $user->billing_phone ); ?>" /> </p> <?php } // Check and validate the mobile phone add_action( 'woocommerce_save_account_details_errors','billing_phone_field_validation', 20, 1 ); function billing_phone_field_validation( $args ){ if ( isset($_POST['billing_phone']) && empty($_POST['billing_phone']) ) $args->add( 'error', __( 'Please fill in your Mobile phone', 'woocommerce' ),''); } // Save the mobile phone value to user data add_action( 'woocommerce_save_account_details', 'my_account_saving_billing_phone', 20, 1 ); function my_account_saving_billing_phone( $user_id ) { if( isset($_POST['billing_phone']) && ! empty($_POST['billing_phone']) ) update_user_meta( $user_id, 'billing_phone', sanitize_text_field($_POST['billing_phone']) ); }
ولی وقتی کد شما رو میزارم، توی دیباگ لاگ این خطا رو میده:
called in /home/upanteir/domains/gpante.com/public_html/wp-includes/class-wp-hook.php on line 303 and defined in /home/upanteir/domains/gpante.com/public_html/wp-content/themes/woodmart-child/functions.php:359
Stack trace:
#0 /home/upanteir/domains/gpante.com/public_html/wp-includes/class-wp-hook.php(303): ywp_convert_user_and_post_metadata_numbers_to_latin('\xDB\xB1\xDB\xB2\xDB\xB3\xDB\xB4\xDB\xB1\xDB\xB2\xDB\xB3\xDB...', 'billing_phone', 'user')
#1 /home/upanteir/domains/gpante.com/public_html/wp-includes/plugin.php(189): WP_Hook->apply_filters('\xDB\xB1\xDB\xB2\xDB\xB3\xDB\xB4\xDB\xB1\xDB\xB2\xDB\xB3\xDB...', Array)
#2 /home/upanteir/domains/gpante.com/public_html/wp-includes/meta.php(1233): apply_filters('sanitize_user_m...', '\xDB\xB1\xDB\xB2\xDB\xB3\xDB\xB4\xDB\xB1\xDB\xB2\xDB\xB3\xDB...', 'billing_phone', 'user')
#3 /home/upanteir/domains/gpante.com/public_html/wp-i in /home/upanteir/domains/gpante.com/public_html/wp-content/themes/woodmart-child/functions.php on line 359