在两个添加操作之间共享变量(_A)

时间:2020-09-02 作者:Scott Paterson

我想在两个add\\u操作之间共享一个变量。目前我正在尝试使用全局。然而,它不起作用。下面这个简单的例子说明了这个问题。在本例中,test_before_send_mail() 之前运行test_get_form_post_callback().


$test = \'123\';

add_action(\'wpcf7_before_send_mail\', \'test_before_send_mail\');
function test_before_send_mail() {
     global $test;
     $test = \'456\';
}


add_action(\'wp_ajax_test_get_form_post\', \'test_get_form_post_callback\',1);
add_action(\'wp_ajax_nopriv_test_get_form_post\', \'test_get_form_post_callback\',1);
function test_get_form_post_callback() {
     global $test;
     echo $test; ($test is equal to 123 still, when it should be equal to 456.)
}

我尝试过改变add_action 优先级级别,并尝试通过函数直接传递变量。我想这可能与wpcf7_before_send_mail 明确地有人知道如何让它工作吗?

编辑:要添加更多关于我正在尝试做的事情,请在提交联系人表格7时运行(wpcf7_before_send_mail). 我正在使用一个add\\u操作来钩住它。此时设置了一些变量,我需要稍后使用。

提交联系人表单7后,我使用JavaScript强制表单重定向。在这个重定向过程中,我需要从以前访问这些变量,所以我使用了一个add\\u action Ajax挂钩。

我也不能使用cookie或会话。我尝试了这两种方法,但要么在某些浏览器中失败,要么在某些具有会话缓存的服务器上失败。

1 个回复
SO网友:cjbj

首先,使用的顺序add_action 不相关。它所做的唯一一件事就是在遇到钩子时记录要执行的操作。只有当同一挂钩上有多个函数时,添加的操作的优先级才变得相关(read more).

因此,如果全局变量没有更改,这意味着钩子会更改它(wpcf7_before_send_mail) 在钩子后调用,在钩子后测试是否已更改(wp_ajax_test_get_form_post). 或者根本不调用更改挂钩。你可以通过回应里面的东西来改变后者test_before_send_mail(). 如果没有打印任何内容,则不会调用挂钩,如果有,则调用挂钩为时已晚。

根据您想要实现的目标,最简单的解决方案是连接test_get_form_post_callbackwpcf7_before_send_mail 同时,使用优先级来确保正确的执行顺序。

如果两者都由你掌控test_before_send_mail()test_get_form_post_callback 最干净的解决方案是在其中一个函数中包含一个过滤器挂钩,从而消除了对全局变量的需要。像这样:

function wpse374144_main ($args) {
  ... do stuff
  $var = something;
  $var = apply_filters (\'wpse374144_main_filter\', $var);
  }

 add_filter (\'wpse374144_main_filter\',\'wpse374144_main_callback\',10,1);

 function wpse374144_main_callback ($var) {
   ... do stuff
   return $var;
   }

相关推荐

如何在Functions.php中链接style.css

我是WordPress的新手;我刚开始学习WordPress。我想把风格联系起来。函数中的css。php,但我无法解决这里可能存在的问题。谁能给我指出正确的方向吗?指数php<?php get_header(); ?> <?php if ( have_posts() ) { while ( have_posts() ) { the_post();