Суть проблемы: код файла административной страницы срабатывает, когда уже отправлены все заголовки и часть страницы отображена. Даже в самом верху страницы wp-redirect не срабатывает. Как решить эту проблему? Прошу дать развернутый ответ
Сперва я подумал, что нужно всего лишь отделить логику от шаблона. Но как это правильно сделать? Как создать административную страницу, данные для которой подготавливаются заранее? Традиционно код в плагинах WP это винигрет из кода и верстки. Мне очень понравился плагин
https://github.com/tombenner/wp-mvc и я хотел бы с ним поэкпериментировать. Демо пример впечаляет. Там есть своя ORM и билдер форм! Но сейчас мне этот вариант не подходит. Не готов использовать стороннее решение с его подводными камнями. Мне нужно оперативно разработать рабочее решение. Но если кто пользовался, поделитесь впечатлением.
Но вернемся к сути проблемы! Что я делаю не так? На всякий случай приложу код страницы плагина в админке. Код написан наскоро, но думаю, что идея ясна. Беглое изучение плагинов-заготовок и официального манула по созданию плагинов не помогло
Проблемный код
<?php
wp_redirect('https://yandex.ru/');
require_once (WP_PLUGIN_DIR . '/self-hosted-tube/classes/class-queue-list-table.php');
$qListTable = new Queue_List_Table();
if(isset($_GET['action']))
{
if($_GET['action'] == 'delete')
{
$qListTable->delete_item($_GET['item']);
}
else if($_GET['action'] == 'update_item')
{
if(!empty($_POST))
{
$qListTable->update_item($_GET['item'], $_POST);
wp_redirect($_REQUEST['page'] . '?page=queue&action=edit_form&item=' . $qItem['id']);
exit();
}
}
else if($_GET['action'] == 'edit_form')
{
$qItem = $qListTable->get_item($_GET['item']);
?>
<div class="wrap">
<h2>Очередь задач</h2>
<form class="updateQueueForm" name="item_data" action="?page=<?php echo $_GET['page'] ?>&action=update_item&item=<?php echo $qItem['id'] ?>" method="POST">
<div class="fieldItem">
<span class="textItem">ID: <?php echo $qItem['id'] ?></span>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="command" value="<?php echo $qItem['command'] ?>"> Задача </label>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="status" value="<?php echo $qItem['status'] ?>"> Статус</label>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="prioritet" value="<?php echo $qItem['prioritet'] ?>"> Приоритет</label>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="params" value="<?php echo $qItem['params'] ?>"> Параметры</label>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="created" value="<?php echo $qItem['created'] ?>"> Создана</label>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="upldated" value="<?php echo $qItem['upldated'] ?>"> Обновлена</label>
</div>
<div class="fieldItem">
<label for="commandField"><input type="text" name="finished" value="<?php echo $qItem['finished'] ?>"> Закончена</label>
</div>
<div class="fieldItem">
<input type="submit" name="updateButton" value="Обновить">
</div>
</form>
<?php
}
}
if(!isset($_GET['action']) || $_GET['action'] != 'edit_form') {
$qListTable->prepare_items();
$qListTable->display();
}
?>
</div>
Пока приходит в голову только цепляться за action template_redirect и в нём выполнять всю логику плагина, проверяя $_GET['page']. Но неясно, как передать подготовленные данные для отрисовки на саму страницу $_GET['page']