【问题标题】:How to redirect to different admin page in Wordpress?如何重定向到 Wordpress 中的不同管理页面?
【发布时间】:2010-10-04 11:22:26
【问题描述】:

我正在编写一个 Wordpress 插件。

我想执行重定向(在从 POST 数据等创建数据库记录之后)到其他 ADMIN 页面。

header("Location: ...) 和 wp_redirect() 都不起作用 - 我明白了

警告:无法修改标头信息 - 标头已由

发送

原因很明显。

如何在 Wordpress 中正确执行重定向?

【问题讨论】:

    标签: php redirect wordpress


    【解决方案1】:

    对于使用 add_submenu_page(或相关函数)添加的链接,使用返回的 $hook_suffix 将操作添加到“load-$hook_suffix”并在那里进行重定向。这是在输出开始之前挂钩页面加载的方式。

    【讨论】:

      【解决方案2】:

      在您的表单操作中,将“noheader=true”添加到操作 URL。这将防止在重定向之前输出管理区域的标题。例如:

      <form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">
      

      【讨论】:

      • ...恐怖!我只是浪费了 4 个小时试图克服这个问题!为什么 wordpress 不建议将其添加到 url?谢谢!如果可以的话,我会多投一百次。
      【解决方案3】:

      如果您在使用 WP add_page* 函数时仍想从插件管理页面重定向到另一个管理页面,那么在处理您的请求后,您可以回显如下内容:

      <script type="text/javascript">
      window.location = '/whatever_page.php';
      </script>
      

      这只是呈现一个基于 javascript 的重定向到“/whatever_page.php”,从而确保 WP 已经发送的标题没有问题,正如 Chris Ballance 已经说过的那样。

      将“/whatever_page.php”改为“/wp-admin/admin.php?page=whatever_page”

      【讨论】:

      • 这应该是最后的手段!
      【解决方案4】:

      将其加载到 template_redirect 中。

      add_action('template_redirect', 'myplugin_template_redirect');
      
      function myplugin_template_redirect() {  
         wp_redirect('http://www.example.com/', 301);
      }
      

      【讨论】:

      • template_redirect 不是 WordPress 管理后端中可用的操作挂钩。
      【解决方案5】:

      我认为我做错了。

      我的代码在 add_menu_page() 里面 add_action('admin_menu', ...) 调用

      这可能会在请求期间稍后调用(在创建并显示页面标题之后)。

      将我的代码移到插件句柄之外,进入主范围是有效的 - 它需要一些清理和修复,但重定向有效。

      不管怎样,谢谢你的回答。

      【讨论】:

        【解决方案6】:

        您需要确保在重定向发生之前没有任何内容发送到 http 输出。

        您可以设置“window.location('newlocation');”并且在将输出发送到浏览器后仍然可以重定向。

        【讨论】:

        • 尝试设置 window.location 并使用 javascript 进行重定向。
        • 我知道,但输出来自 .../wp-admin/menu-header.php:128 这是一个标准的 wordpress 文件。我可以试试 ob_start + ob_* - 但这似乎有点老套。
        【解决方案7】:

        我想你只需要确保 wp_redirect() 在任何输出发送之前就出现了。

        【讨论】:

          猜你喜欢
          • 2017-07-23
          • 1970-01-01
          • 2020-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-25
          • 1970-01-01
          • 2017-07-28
          相关资源
          最近更新 更多