@karpo518

Как в Wordpress настроить редирект на административной странице разрабатываемого плагина?

Суть проблемы: код файла административной страницы срабатывает, когда уже отправлены все заголовки и часть страницы отображена. Даже в самом верху страницы 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']
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы