Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在wordpress管理页面中设置php头重定向_Php_Wordpress_Plugins_Header_Postback - Fatal编程技术网

如何在wordpress管理页面中设置php头重定向

如何在wordpress管理页面中设置php头重定向,php,wordpress,plugins,header,postback,Php,Wordpress,Plugins,Header,Postback,编辑:我已经扩展了示例代码以包含一个基本用例 我正在尝试为wordpress中的插件创建一个管理页面。我已经成功地使用法典中的说明制作了一个简单的管理页面。然而,我目前陷入困境。我正在尝试使用 header("Location: /myLocation"); 调用,但我无法设置标题,因为在加载管理页面时,其他HTML已经输出。我想使用头重定向,以便我为管理页面构建的表单处理程序可以使用POST-to-GET模式。(使用post将表单回发到自身,处理post数据,使用get将标题重定向回自身,这

编辑:我已经扩展了示例代码以包含一个基本用例

我正在尝试为wordpress中的插件创建一个管理页面。我已经成功地使用法典中的说明制作了一个简单的管理页面。然而,我目前陷入困境。我正在尝试使用

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我已经编辑了我的问题以包含一个用例。