当前位置: 首页>>网站问题>>正文


如何最好地处理自定义插件页面操作?

webfans 网站问题 , , , 去评论

问题描述

我经常遇到同样的烦恼,所以我想我会看到那里有什么想法或经验……

我创建了一个使用它自己的管理页面的插件。它必须。现在我整理了 WP_List_Table()的东西,我必须说它很棒……但……

自定义插件页面总是加载为admin.php?page=...,除非我想直接从插件目录加载它们,我不这样做。现在,如果我从该页面执行’action’,我需要以某种方式处理,然后重定向回到没有action参数的页面。无论我是做GET还是POST,真的。

在它的所有内部页面上WP在同一页面上执行此操作,它会检查是否有操作,如果是,则处理它,然后在没有操作的情况下重定向到自身。这是可能的,因为在这些页面上还没有加载admin-header

但是,如果您尝试在自己的页面上执行此操作,则管理界面的一半已经发送到浏览器,因此无法再进行重定向。显然,解决方案是将POST /GET直接发送到另一个页面,在其上加载WP框架,进行处理然后重定向回原始页面……但是…这有点烦人,因为……我原来的页面是通过回调加载的,因此它在我的类的方法中运行。那好美丽。

如果我加载一个单独的页面,我必须手动包括wp-load.php并且我不在我的课程中,这很烦人,在我的特殊情况下特别容易出错,因为我只是匿名实现我的插件类,以便no-one可以从外。

所以在这个漫长的故事之后……有没有人想出一个很好的解决方案来通过回调加载另一个页面,而不必围绕它设置整个管理界面?

(我知道一个解决方法……我可以将一个函数挂钩到load-....,它检查动作参数并进行处理和重定向。但我想知道是否有更好的方法。)

谢谢。

最佳解决思路

根据经验,您应该对大多数操作使用POST请求,以确保它们不是executed by accident。但是,在POST请求之后重定向到正常页面也是一种很好的做法,以防止在用户刷新页面时重复执行。

所以流程是这样的:

  1. 您提交的POST表单的插件页面

  2. 处理请求的页面,重定向到该页面

  3. 您的插件页面,显示操作的结果

中间页面不一定是您的插件页面。这意味着您可以使用三年前包含的“generic POST handler”,即admin.php中的'admin_action_' . $_REQUEST['action']挂钩。

示例用户是the Akismet plugin。如果要可靠地使用它,则必须直接提交给admin.php,而不是提交到包含admin.php的其他页面。

以下是如何使用它的一个非常基本的示例:

add_action( 'admin_action_wpse10500', 'wpse10500_admin_action' );
function wpse10500_admin_action()
{
    // Do your stuff here

    wp_redirect( $_SERVER['HTTP_REFERER'] );
    exit();
}

add_action( 'admin_menu', 'wpse10500_admin_menu' );
function wpse10500_admin_menu()
{
    add_management_page( 'WPSE 10500 Test page', 'WPSE 10500 Test page', 'administrator', 'wpse10500', 'wpse10500_do_page' );
}

function wpse10500_do_page()
{
?>
<form method="POST" action="<?php echo admin_url( 'admin.php' ); ?>">
    <input type="hidden" name="action" value="wpse10500" />
    <input type="submit" value="Do it!" />
</form>
<?php
}

次佳解决思路

我通过简单地将noheader = true添加到用户提交的页面上的操作URL进行操作来略微区别

我的处理程序然后执行操作(即通常添加,更新或删除)然后用a wp_redirect()完成到下一页操作(例如添加页面 – >编辑页面,删除页面 – >列表页面,编辑页面 – >编辑页面)。我还在URL上传递了一条消息,因此我可以显示状态,例如更新成功或失败。

这种方法保留了所有操作:列出,添加,编辑,删除,bulk-delete等在同一个类中,并使用相同的管理slug,因此很容易维护和理解。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2168.html,转载请务必附带本地址声明。