插件的最佳实践:始终检测管理-AJAX调用?

时间:2016-03-11 作者:Mark Thomson

最近,我正在调试/破解一个由其他人编写的插件。我在我感兴趣的地方设置了一个断点——一个相对复杂的管理页面。

我注意到,即使在管理ajax调用期间,这个特定的插件仍然会通过所有逻辑来生成所讨论的页面。即使它从未显示。

这是正常做法吗?这个插件不应该detecting that it\'s an AJAX call 这样就不用费心做这些工作了?

在进行管理ajax调用时,WP是否总是生成整个页面?这似乎不对。

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

这与AJAX本身没有多大关系,它与插件/主题开发的核心原则有关——始终使用最新的钩子来运行代码。听起来这个插件好像在admin_init 这是一个非常早期的钩子,除了通常的管理之外,还可以从AJAX和XML-RPC触发。更合适的钩子可能是admin_menuadmin_notices 假设您有一些不限于一页的通用管理代码。

试图检测导致代码执行的代码路径的想法违反了基本的软件开发原则-功能代码应该有明确的输入,OOP代码应该只引用对象状态,而不引用其他任何内容。您的代码应该尽可能不受平台的影响,就像您可能希望明年在drupal中使用它一样。在现实生活中,drupal可能是不现实的,但代码越独立,就越容易使用自动单元测试工具进行测试,而不必费心设置整个WP环境。

但这有可能吗?我想到了两种方法,IIRC$_SERVER 属性包含正在运行的php脚本的路径,对于ajax,该脚本的文件名为....\\admin-ajax.php, 或者,您可以使用PHP的回溯API检查调用堆栈,以了解您的来源。

相关推荐

以编程方式模拟在wp-admin中查看帖子

当我在以下位置查看帖子时,会触发一个进程:https://my.wordpress.page/wp-admin . 我不知道在这个过程中发生了什么。我想为帖子ID列表中的所有帖子触发它。如何以编程方式启动在wp admin页面中查看帖子时启动的所有进程?类似于view_post_in_wp_admin( 123 ); 其中123是岗位id。