2013-12-17 3 views
1

EDIT: я расширил код примера, включив базовый прецедент.Как настроить перенаправление заголовка php на странице администрирования wordpress

Я пытаюсь создать страницу администратора для плагина в wordpress. Мне удалось создать простую страницу администратора, используя инструкции в кодексе. Тем не менее, я в настоящее время застрял. Я пытаюсь использовать вызов

header("Location: /myLocation"); 

, но я не могу установить заголовок, так как Apparantly к тому времени страница админа была загружена, другие HTML уже были выведены. Я хочу использовать перенаправление заголовка, так что обработчик формы, который я создаю для страницы администратора, может использовать шаблон POST для GET. (вернуть форму себе в сообщение, обработать почтовые данные, заголовок перенаправить обратно к себе с помощью get, чтобы он не предотвращал повторные сообщения и формы предупреждений о повторной отправке)

Есть ли способ изменить мою настройку, чтобы я был можно позвонить по телефону header()?

Я последовал за учебник здесь http://codex.wordpress.org/Adding_Administration_Menus

и вот мой код, который в настоящее время в mu-plugin. Будет ли это регулярный плагин повлиять на мою способность использовать header()?. Я бы предпочел придерживаться mu-plugin, если это возможно, но использовал бы обычный, если бы мне пришлось.

Вот код, все работает отлично, за исключением звонка на header(). Его просто образец, приведенный в учебнике, с некоторыми из моих собственных текстов.

Спасибо за чтение!

<?php 
/** Step 2 (from text above). */ 
add_action('admin_menu', 'my_plugin_menu'); 

/** Step 1. */ 
function my_plugin_menu() { 
    add_menu_page('My Plugin Options', 'Manage Articles', 'manage_options', 'manageArticles', 'manage_articles'); 
} 

/** Step 3. */ 
function manage_articles() { 
    if (!current_user_can('manage_options')) { 
     wp_die(__('You do not have sufficient permissions to access this page.')); 
    } 
?> 

<?php 

//this block of code is an example of what I am trying to do 

if (isset($_POST['formSubmit']) && $_POST['formSubmit']==='true') 
{ 
global $wpdb; 
$wpdb->query("UPDATE myTable set name='{$_POST['something']}' where id='{$_POST['id']}'"); 
header("Location: manageArticles?updated"); 
} 
if (isset($_GET['updated'])) 
{ 
echo "you have updated the table!"; 
} 

    ?> 
    My admin page 
    <form name="theForm" action="" method="post"> 
     Something: <input type="text" value="something" name="something"><br> 
     Row ID: <input type="text" value="1" name="id"><br> 
     <input type="hidden" value="true" name="formSubmit"> 
     <input type="submit"> 
    </form> 
    <?php 
} 
?> 
+0

Вы всегда можете попробовать поставить 'ob_start(); 'под вашим первым'

+1

html, который уже был получен, поступает из ядра wordpress, а не из моей страницы, поэтому буферизация вывода в моем собственном скрипте не будет иметь никакого эффекта. Я думаю, мне нужно использовать крючок, но я не знаю много чего. – chiliNUT

+0

@chiliNUT Почему вы хотите перенаправить в manage_articles? Поэтому, если пользователь нажимает на управление меню товаров, что он должен делать? – Sabari

ответ

1

Итак ... У меня еще больше узнать о крючках. Так как это mu-plugin, согласно списку администратора крючками here, я могу использовать muplugins_loaded hook

Так поставить это в верхней части плагина

<?php 
add_action('muplugins_loaded', 'my_plugin_override'); 

function my_plugin_override() { 
    // your code here 
    if (isset($_POST['formSubmit']) && $_POST['formSubmit'] === 'true') { 
     global $wpdb; 
     $wpdb->query("UPDATE myTable set name='{$_POST['something']}' where id='{$_POST['id']}'"); 
     header("Location: manageArticles?updated"); 
    } 
    if (isset($_GET['updated'])) { 
     echo "you have updated the table!"; 
    } 
} 
?> 

<?php 
//the rest of the code... 
/** Step 2 (from text above). */ 
//...... 
Смежные вопросы