Я работаю в WordPress с расширением для Woo Commerce. У меня есть два настраиваемых поля на странице оформления заказа, которые одновременно сохраняют и отправляют уведомления, когда пользовательское входное значение либо существует в базе данных, а другое — когда его нет. Оба эти поля работают самостоятельно, но когда оба активны, только первое условие выдает ошибку независимо от того, какое поле введено.
Код, с которым я работаю
// process the checkout
function jm_custom_checkout_field_process() {
// Access the database
global $wpdb;
// query the database
$meta_key = '_create_new_group';
$groupnames = $wpdb->get_col($wpdb->prepare("SELECT meta_value
FROM $wpdb->postmeta
WHERE meta_key = %s",$meta_key
));
// get value from user
$newgroupname = $_POST['create_new_group'];
// get value from user
$existing_groupname = $_POST['add_to_existing_group'];
// check if user input is in array
if( in_array($newgroupname, $groupnames ) ) {
wc_add_notice( __( 'Group name already taken.' ), 'error' );
}
// check if user input is in array
if( ! in_array($existing_groupname, $groupnames ) ) {
wc_add_notice( __( 'Group name does not exist.' ), 'error' );
}
}
add_action('woocommerce_checkout_process', 'jm_custom_checkout_field_process');// save the extra field when checkout is processed
function jm_save_extra_checkout_fields( $order_id, $posted ){
// Check if there is user input and save
if( isset( $posted['add_to_existing_group'] ) ) {
update_post_meta( $order_id, '_create_new_group', sanitize_text_field( $posted['add_to_existing_group'] ) );
}
// Check if there is user input and save
if( isset( $posted['create_new_group'] ) ) {
update_post_meta( $order_id, '_create_new_group', sanitize_text_field( $posted['create_new_group'] ) );//
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'jm_save_extra_checkout_fields', 10, 2 );
У кого-нибудь есть предложения?
Предполагая, что вызов wc_add_notice()
в результате выхода из пути выхода, вы можете попробовать что-то вроде:
$blnShowFirstNotice = false;
$blnShowSecondNotice = false;
// check if user input is in array
if ($newgroupname)
{
if( in_array($newgroupname, $groupnames ) )
{
$blnShowFirstNotice = true;
}
}
// check if user input is in array
if ($existing_groupname)
{
if( !in_array($existing_groupname, $groupnames ) )
{
$blnShowSecondNotice = true;
}
}
if($blnShowFirstNotice==true && $blnShowSecondNotice==false)
{
wc_add_notice( __( 'Group name already taken.' ), 'error' );
}
else if($blnShowFirstNotice==false && $blnShowSecondNotice==true)
{
wc_add_notice( __( 'Group name does not exist.' ), 'error' );
}
else if($blnShowFirstNotice==true && $blnShowSecondNotice==true)
{
wc_add_notice( __( 'Group name already taken.' . 'Group name does not exist.' ), 'error' );
}
Других решений пока нет …