使用php类维护wordpress中的状态-对象寿命



我从头开始创建了一个html表单,并通过使用Wordpress Shortcode API将其包含在内。表单是一个基于用户数据集合的表。该集合是一个php类。在集合的构造函数中,我尝试向注册表单"post"操作

add_action( 'admin_post_my_form_action' function() {
handle_post_data();
}

表单声明如下:

<form action="' . esc_url( admin_url('admin-post.php') ) . '" method="post">

并且有一个隐藏的"输入"字段,如下所示:

<input type="hidden" name="action" value="my_form_action">

一切都应该好起来。。。

但是,表单处理程序永远不会被调用。

通过将调试添加到__construct((和__destructure((方法中,我发现Collection对象的寿命非常短。在调用回调之前,正在销毁集合对象。(这令人惊讶,因为据推测wordpress核心有一个回调句柄(

我试图通过在全局范围内声明Collection对象并使用带有静态实例属性的singleton模式来保持它的活动性。这两种方法都不起作用。

随着时间的推移,有没有一种很好的语言表达方式来保持状态?

感谢

附录:当我把add_action钩子放在函数或类之外时,回调就起作用了。然而,这并不能解决我的问题。。我需要Collection对象保持足够长的时间,以便在回调中使用它-J

add_action需要在函数或类之外,因为在WordPress开始处理数据之前需要调用此代码。如果将其放入一个类中,则需要实例化该类并调用包含该代码的函数来注册钩子。

我不知道你说的"收藏"是什么意思。表单中的所有数据都可以通过$_POST变量获得。试着使用var_dump($_POST(或print_r($_POST(打印所有请求数据,看看你会从中得到什么。

最新更新