wordpress — два оператора if, оба работают отдельно, но не вместе, переполнение стека

Я работаю в 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 );

У кого-нибудь есть предложения?

0

Решение

Предполагая, что вызов 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' );
}
0

Другие решения

Других решений пока нет …