如何在wordpress管理页面中设置php头重定向
编辑:我已经扩展了示例代码以包含一个基本用例 我正在尝试为wordpress中的插件创建一个管理页面。我已经成功地使用法典中的说明制作了一个简单的管理页面。然而,我目前陷入困境。我正在尝试使用如何在wordpress管理页面中设置php头重定向,php,wordpress,plugins,header,postback,Php,Wordpress,Plugins,Header,Postback,编辑:我已经扩展了示例代码以包含一个基本用例 我正在尝试为wordpress中的插件创建一个管理页面。我已经成功地使用法典中的说明制作了一个简单的管理页面。然而,我目前陷入困境。我正在尝试使用 header("Location: /myLocation"); 调用,但我无法设置标题,因为在加载管理页面时,其他HTML已经输出。我想使用头重定向,以便我为管理页面构建的表单处理程序可以使用POST-to-GET模式。(使用post将表单回发到自身,处理post数据,使用get将标题重定向回自身,这
header("Location: /myLocation");
调用,但我无法设置标题,因为在加载管理页面时,其他HTML已经输出。我想使用头重定向,以便我为管理页面构建的表单处理程序可以使用POST-to-GET模式。(使用post将表单回发到自身,处理post数据,使用get将标题重定向回自身,这样可以防止重新提交和表单重新提交警告)
是否有办法修改设置,以便调用header()
?
我在这里学习了教程
这是我的代码,目前在mu插件中。如果可能的话,我宁愿使用mu插件,但如果必须的话,我会使用常规插件
下面是代码,除了调用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
}
?>
所以。。。我还有更多关于钩子的知识要学。由于这是一个mu插件
,根据管理挂钩列表,我可以使用
所以把这个放在插件的顶部
<?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). */
//......
您始终可以尝试放置ob_start()代码>在您的第一个下面,已经输出的html来自wordpress核心,而不是我的页面,因此我自己的脚本中的输出缓冲不会有任何效果。我想我需要使用一个钩子,但除此之外我知道的不多。@chiliNUT为什么在manage_文章中需要重定向?因此,如果用户单击“管理文章”菜单,该怎么办?您必须为其中一个早期运行的操作注册操作/挂钩回调(或Wordpress现在调用的任何回调),检测需要重定向的条件,然后发出位置标题并退出。@Sabari我已经编辑了我的问题以包含一个用例。