编辑:我已经扩展了示例代码以包含基本用例。
我正在尝试为wordpress中的插件创建管理页面。我已经成功地使用codex中的指令创建了一个简单的管理页面。但是,我目前卡住了。我正在尝试使用
header("Location: /myLocation");
调用,但是我无法在加载管理页面之前设置一个标题,其他HTML已经输出。我想使用标头重定向,以便我为管理页面构建的表单处理程序可以使用POST到GET模式。 (使用post将表单回发给自己,处理发布数据,使用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 :(得分: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). */
//......