Как снять флажок acf с помощью delete_post_meta

Я работаю над плагином wp, где люди могут присоединиться / не присоединиться к событию.

Что я сделал до сих пор:

Я создал пользовательский тип поста 'tickets' с флажком ACF, который динамически заполняется заголовками постов 'Event'. На одном мероприятии люди могут нажать на кнопку, которая создаст сообщение о заявке с установленным значением флажка ACF. Если у пользователя уже есть билет, он обновит сообщение о билете. Это все прекрасно работает.

Что я хочу:

Когда пользователь хочет отсоединиться от события, значение acf должно быть отключено. Я пробовал несколько вещей, как delete_post_meta($RegisterTicket, 'my_custom_field', $eventname );

Часть кода:

Перед этой частью кода я определяю, нужно ли создавать или обновлять тикет-пост. Тогда следующее:

/* Get the current field state */     
    $field_checked = get_field($field_key, $mypostid);             

            /* Check if the posttitle already is checked, if so delete_post_meta */
            if(is_array($field_checked) && in_array($eventname, $field_checked)) { 

              delete_post_meta($RegisterTicket, 'my_custom_field', $eventname );

            }  else {
              /* if not already checked, add the title to the array so it will be checked and update_post_meta */
              $field_checked[] = $eventname;      
              update_post_meta($RegisterTicket, 'my_custom_field', $field_checked );
            }  


        update_post_meta($RegisterTicket, 'user', $TheUserID); 

Delete_post_meta не работает, проверенное значение не становится непроверенным. Как это решить? Заранее спасибо.

2 ответа

Вы должны проверить удалить мета.

Присвойте результат переменной:

if(is_array($field_checked) && in_array($eventname, $field_checked)) { 

         $result =delete_post_meta($RegisterTicket, 'my_custom_field', $eventname );
         echo '<h1>'.$result.'</h1>';
        }  else {
          /* if not already checked, add the title to the array so it will be checked and update_post_meta */
          $field_checked[] = $eventname;      
          update_post_meta($RegisterTicket, 'my_custom_field', $field_checked );
        }  

если оно ложно, вам нужно проверить, что $RegisterTicket - это идентификатор записи, "mycustomfield" и $eventname, одно из них будет неправильным. иногда удаляемая переменная неверна. Альтернативный способ сделать это - извлечь его из базы данных, чтобы не было ошибок.

$field_checked= get_post_meta($RegisterTicket, 'my_custom_field', true);

или просто удалите все ключи с этим полем для сообщения:

delete_post_meta($RegisterTicket, 'my_custom_field');

Получил это работает. В то время как флажки ACF хранят свои значения в массиве, нам нужно сбросить значение из этого массива, чтобы отключить его.

Вот что я сделал:

$field_checked = get_field($field_key, $mypostid);

Допустим, $field_checked = массив событий 1, 2 и 5

В этом случае get_field является функцией acf (поэтому она возвратит события 1, 2 и 5). Мы также можем использовать здесь get_post_meta с соответствующими переменными. Тогда следующее:

    if(is_array($field_checked) && in_array($eventname, $field_checked)) { 
      if(($key = array_search($eventname, $field_checked)) !== false) {
           unset($field_checked[$key]);

      }

    }  else {

      $field_checked[] = $eventname;      

    }  

update_post_meta($RegisterTicket, 'my_custom_field', $field_checked );
update_post_meta($RegisterTicket, 'user', $TheUserID);

Сначала мы проверяем, хранится ли значение в массиве, и проверяем, есть ли уже значение в массиве (поэтому мы проверяем, проверено ли оно). Если да: мы хотим удалить переменную из массива. unset работает только с ключом, поэтому нам нужно сначала найти ключ с помощью array_search. И тогда мы сбросим его, что означает, что мы удаляем значение из массива.

Вкратце: если $eventname = 'Event 5', то $field_checked будет массивом событий 1 и 2.

update_post_meta в конечном итоге обновит сообщение и сохранит правильный массив флажков.

Другие вопросы по тегам