Выводим на сайте HTML форму checkbox и записываем в неё с помощью PHP значения истина или ложь. Проверяем пуст ли этот чекбокс и ставим галочку включенной или отключённой. Записывать данные будем в произвольное поле WordPress.
С помощью нижеследующих функций, мы можем внедрить какие-то административные функции у себя на сайте. Именно оттуда привожу данный пример, но конечно же эти функции можно применять гораздо шире.
Пример формы на сайте, которую мы можем создать:
В примере она будет упрощена до одного чекбокса и кнопки отправить. Другие данные на скрине приведены лишь в качестве примера и в данной статье не нужны.
Для того чтобы записывать пустые значения в checkbox нужно выводить перед основной формой input почти точно такой же input, но скрытый и пустым значением value:
<input type="checkbox" name="first_checkbox" value="Yes" />
Если этого не сделать, то пустые значения (когда вы сняли галочку) обновляться не будут. Более того, в примере ниже, после очередного обновления страницы будет затираться значение истина.
Обычно в подобных примерах показывают, что form action="" содержит ссылку на файл, который будет обрабатывать нашу форму. Часто же это не пригождается. Вместо ссылки на файл оставляем пустое значение, а код для работы этой формы пишем следом за формой HTML.
Код для вывода формы HTML:
<input type="hidden" name="first_checkbox" value="" />
<input type="checkbox" name="first_checkbox" value="Yes" <?php
if (cf('first_checkbox')) {
echo 'checked';
} ?> /> Принудительно обновить данные
<br><br><input type="submit" name="submit" value="Применить" /><br><br>
</form>
Следующий за ним код будет обрабатывать нашу форму:
$post_id = $GLOBALS['post']->ID; // Нужна для работы переменной post_id
// Файл с данными
if(isset($_POST['first_checkbox']) &&
$_POST['first_checkbox'] == 'Yes') {
update_post_meta($post_id, 'first_checkbox', 1 );
}
else if(isset($_POST['first_checkbox']) &&
$_POST['first_checkbox'] == '') {
delete_post_meta($post_id, 'first_checkbox');
}
// Обновление страницы
if(isset($_POST['submit'])) {
echo "<meta http-equiv='refresh' content='0'>";
}
Теперь, если мы поставим галочку и нажмём на кнопку применить, то в данном случае файл перезакачается на новый, а требуемая галочка будет отмечена. Тем самым мы видим какая из функций сейчас включена.
Разбор кода подробнее
В форме HTML можно увидеть следующее:
if (cf('first_checkbox')) {
echo 'checked';
} ?>
Это проверка на значение произвольного поля в WordPress. У меня для этого сделана отдельная функция. Этот участок кода вам нужно заменить самостоятельно, я оставил его для себя, чтобы сохранить оригинал кода. Без этой функции этот участок должен выглядеть так (меняете на него):
echo 'checked';
} ?>
Этим мы проверяем есть ли данные в произвольном поле first_checkbox. Если они там имеются мы ставим в HTML форму значение checked. Тем самым даём понять браузеру, чтобы он показал там галочку. Если данные пустые, то галочка стоять не будет.
Как проверить значения Checkbox
$_POST['first_checkbox'] == 'Yes') {
update_post_meta($post_id, 'first_checkbox', 1 );
}
Здесь мы проверяем Checkbox на Checked. Если галочка выставлена, то в нужное значение произвольного поля (в примере это first_checkbox) ставим цифру 1.
Как удалить значение в checkbox
$_POST['first_checkbox'] == '') {
delete_post_meta($post_id, 'first_checkbox');
}
Наоборот, если галочки нет, то удаляем произвольное поле first_checkbox.
Очень важно в структуре else указать else if и конкретно значение произвольного поля, то что оно пустое.
Если этого не сделать, а сделать просто else без уточнения, то при обновлении страницы значение произвольного поля будут удаляться само по себе. Обработчик формы будет полагать, что вы поставили пустое значение в неё и обновили страницу. Когда на самом деле вы ничего такого не делали.
Как обновить страницу form action
В конце участка видим такой PHP:
if(isset($_POST['submit'])) {
echo "<meta http-equiv='refresh' content='0'>";
}
С помощью isset($_POST[‘submit’]) мы проверяем была ли нажата кнопка submit. Если да, то обновляем страницу.
Таким образом страница будет обновлена 2 раза. Первый раз когда мы отправим данные. Они запишутся в произвольные поля. Сразу после этого страница почти мгновенно обновится ещё раз и мы увидем, что на нужном свойстве установлена галочка checked.