在最后一个实例中,我这样问是因为在连续两天无法调用自定义javascript函数后,我完全困惑了。我是Wordpress插件开发网的新手,因为我的背景是Java和NodeJS,我不明白为什么我的代码不能工作。
我想根据登录、注销和其他一些内容的成功事件在html头部附加一个脚本。所以我想我可以wp_registration
, wp_login
函数等,丰富调用的一些数据,并将其发送到自定义javascript。但是,只有在调用wp_head
钩住或通过做add_action (\'wp_enqueue_scripts\', \'my_function\' );
和never 在我需要调用的钩子函数中。
出于测试目的,我安装了一个干净的Wordpress实例,并在插件中添加了以下功能:
function my_function() {
wp_register_script( \'custom-script\', plugin_dir_url( __FILE__ ) . \'hook-test.js\' );
wp_enqueue_script(\'custom-script\');
$testVars = array(
\'test\' => __(\'I should see something!\'),
);
wp_localize_script(\'custom-script\', \'test_script_vars\', $testVars);
}
现在
how 我可以在表单中使用它(或使用类似功能):
add_action(\'wp_login\', \'my_function\');
?
javascript永远不会执行。但是当我做的时候add_action(\'wp_head\', \'my_function\');
和add_action (\'wp_enqueue_scripts\', \'my_function\');
它是。。。
我欢迎任何解释和建议。无法想象这是如此难以实现。。。
SO网友:Vegaaaa
事实证明,这与我的代码无关,而是因为您无法在“wp\\u login”挂钩中响应某些自定义javascript。我所做的就是set_transient
在我的内部wp_login
挂钩,然后检查wp_head
如果有任何瞬态设置。在这种情况下,我会回显我的javascript脚本,然后删除瞬态,如下面的回答所述:Run javascript code after wp_login hook?
我现在的代码是:
/**
* Register scripts used for pushing in the dataLayer
*/
function add_my_scripts() {
wp_register_script( \'custom-script\', plugin_dir_url( __FILE__ ) . \'js/append_user_status.js\' );
}
/**
* Set transient in wp_login hook function
*/
function wp_login_hook( $user_login ) {
set_transient( $user_login, \'1\', 0 );
}
/**
* Add wp_login_hook as wp_login hook function
*/
add_action( \'wp_login\', \'wp_login_hook\' );
/**
* Check if there is a transient set and echo js script in wp_head hook
*/
function echo_javascript_after_wp_login() {
global $current_user;
if ( ! is_user_logged_in() )
return;
if ( ! get_transient( $current_user->user_login ) )
return;
$testVars = array(
\'test\' => __(\'I should see something!\'),
);
wp_enqueue_script ( \'custom-script\' );
wp_localize_script(\'custom-script\', \'test_script_vars\', $testVars);
delete_transient( $current_user->user_login );
}
/**
* Add echo_javascript_after_wp_login function as wp_head hook
*/
add_action (\'wp_head\', \'echo_javascript_after_wp_login\', 9 );
如果没有任何补充,我会将其标记为问题的答案,以帮助wordpress插件开发的其他初学者。