#php #wordpress #validation #woocommerce #hook-woocommerce
#php #wordpress #проверка #woocommerce #hook-woocommerce
Вопрос:
У меня есть веб-сайт Woocommerce, и у каждого продукта есть поле IMEI. Мне нужно только для определенного продукта удалить проверку поля (чтобы не проверять поле IMEI). Я перепробовал много способов, но не могу заставить это работать.
Вот скриншот:
И код:
function custom_output_engraving_field() {
$product;
?>
<div class="imei-engraving-field">
<label for="imei-values" name="suwp-imei-values-label">IMEI: <br> (Enter 15 digits), dial *#06# to display </label>
<input type="text" id="imei-engraving" name="imei-engraving" placeholder="<?php _e( 'Enter engraving text', 'myimei' ); ?>" maxlength="15">
<label for="imeinote-values" name="suwp-imeinote-values-label">IMEI Note: </label>
<textarea rows="10" cols="30" id="imeinote-engraving" name="imeinote-engraving" placeholder="<?php _e( 'Enter engraving text', 'myimeinote' ); ?>"> </textarea>
</div>
<?php
}
add_action( 'woocommerce_before_add_to_cart_button', 'custom_output_engraving_field', 15 );
function suwpimei_custom_fields_validation($true, $product_id, $quantity ) {
$imei_values = trim($_REQUEST['imei-engraving']);
$imei = trim($imei_values);
$chk_dup_imei[] = $imei;
$serial_length = 15;
$actual_length = (int)strlen($imei);
$flag_continue_imei = TRUE;
$flag_msg_imei = array();
if ( empty( $imei_values ) ) {
// empty submission
$flag_continue_imei = FALSE;
$flag_msg_imei = 'Please enter at least one IMEI.<br />';
} else {
if ( $actual_length != $serial_length amp;amp; suwpimei_is_digits($imei) == 1 ) {
$flag_continue_imei = FALSE;
$flag_msg_imei = $imei . ' should be ' . $serial_length . ' characters, not '. $actual_length . '. This is not a valid IMEI entry.<br />';
}
if ( suwpimei_is_digits($imei) != 1 ) {
$flag_continue_imei = FALSE;
$flag_msg_imei = $imei . ' is invalid. IMEI should be digits only: no letters, punctuation, or spaces.<br />';
}
if ( $actual_length == $serial_length amp;amp; suwpimei_is_digits($imei) == 1 ) {
// only do the suwp_check_imei when imei is 15 digits
if ($serial_length == 15) {
if (suwpimei_check_imei($imei) == 0) {
$flag_continue_imei = FALSE;
$flag_msg_imei = $imei . ' is not a valid IMEI entry.<br />';
}
}
}
}
$flag_msg_string = '';
$flag_msg_string = $flag_msg_imei;
if ( !$flag_continue_imei ) {
wc_add_notice( $flag_msg_string, 'error' );
return false;
}
if( ! empty ( WC()->cart->get_cart() ) ) {
//WC()->cart->empty_cart();
wc_add_notice( 'Only allowed 1 item in cart, please remove previous item.', 'error' );
return false;
}
return true;
}
add_action( 'woocommerce_add_to_cart_validation', 'suwpimei_custom_fields_validation', 10, 3 );
Комментарии:
1. Просто сравните $product_id, переданный в suwpimei_custom_fields_validation(), с этим конкретным продуктом. Если это то же самое, не проверяйте поле.
2. благодарю за быстрый ответ. Мой идентификатор продукта 873 я пытался сравнить, может быть, я не могу получить идентификатор чего-то другого, не могли бы вы, пожалуйста, отредактировать мой код заранее спасибо
3. Какое поле не следует проверять, IMEI или IMEI Note?
4. обратите внимание на IMEI обоих полей и IMEI IMEI.
Ответ №1:
Вы можете просто сопоставить $product_id с продуктом, который вы не хотите проверять.
function suwpimei_custom_fields_validation( $true, $product_id, $quantity ) {
// Compare against the product which you don't want to validate.
// If it matches, just bail out, return whatever is passed in $true.
if ( $product_id == 873 ) {
return $true;
}
$imei_values = trim( $_REQUEST['imei-engraving'] );
$imei = trim( $imei_values );
$chk_dup_imei[] = $imei;
$serial_length = 15;
$actual_length = intval( strlen( $imei ) );
$flag_continue_imei = true;
$flag_msg_imei = array();
if ( empty( $imei_values ) ) {
// empty submission.
$flag_continue_imei = false;
$flag_msg_imei = 'Please enter at least one IMEI.<br />';
} else {
if ( $actual_length != $serial_length amp;amp; suwpimei_is_digits( $imei ) == 1 ) {
$flag_continue_imei = false;
$flag_msg_imei = $imei . ' should be ' . $serial_length . ' characters, not ' . $actual_length . '. This is not a valid IMEI entry.<br />';
}
if ( suwpimei_is_digits( $imei ) != 1 ) {
$flag_continue_imei = false;
$flag_msg_imei = $imei . ' is invalid. IMEI should be digits only: no letters, punctuation, or spaces.<br />';
}
if ( $actual_length == $serial_length amp;amp; suwpimei_is_digits( $imei ) == 1 ) {
// only do the suwp_check_imei when imei is 15 digits
if ($serial_length == 15) {
if (suwpimei_check_imei($imei) == 0) {
$flag_continue_imei = FALSE;
$flag_msg_imei = $imei . ' is not a valid IMEI entry.<br />';
}
}
}
}
$flag_msg_string = '';
$flag_msg_string = $flag_msg_imei;
if ( ! $flag_continue_imei ) {
wc_add_notice( $flag_msg_string, 'error' );
return false;
}
if( ! empty ( WC()->cart->get_cart() ) ) {
//WC()->cart->empty_cart();
wc_add_notice( 'Only allowed 1 item in cart, please remove previous item.', 'error' );
return false;
}
return true;
}
add_action( 'woocommerce_add_to_cart_validation', 'suwpimei_custom_fields_validation', 10, 3 );
Комментарии:
1. @sifat Рад помочь. 🙂