Как снять флажок 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 в конечном итоге обновит сообщение и сохранит правильный массив флажков.