为什么除了wp_head之外,在我的钩子中没有调用我的Java脚本?

时间:2018-01-30 作者:Vegaaaa

在最后一个实例中,我这样问是因为在连续两天无法调用自定义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\'); 它是。。。

我欢迎任何解释和建议。无法想象这是如此难以实现。。。

3 个回复
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插件开发的其他初学者。

SO网友:swissspidy

WordPress有各种钩子将脚本放入不同区域的队列中。

对于前端wp_enqueue_scripts, 对于后端admin_enqueue_scripts, 对于登录页面login_enqueue_scripts.

我不知道最终成员,但如果它使用wp-login.php 这个login_enqueue_scripts 挂钩应该能用。

如果um_user_registration 在前端的其他地方调用,当连接到um_user_registration. 它将被添加到页脚。

与相同wp_login 钩只要以前调用过这个钩子wp_footer() 在您的主题中,您应该能够直接将任何脚本排队。

SO网友:Stefano Tombolini

该挂钩将在Ultimate Member 2.0中被弃用。

除此之外,您是否在标题中添加了带有do\\u操作的实际挂钩。你的主题的php文件?add\\u操作必须起作用。

我不确定这是不是最好的解决方案。

我宁愿单独注册脚本,在um_user_registration(或其2.0上的新等价物)中单独“本地化”它,并使用Ultimate Member(如果可用)的某些函数有条件地将其排队,如果不可用,则使用usermeta中临时存储的注册结果。

结束

相关推荐

为什么我的浏览器一直在\\divi\\js中加载旧版本的自定义JavaScript文件?

我在中有自定义JavaScript文件theme\\divi\\js. 我修改了这些文件并将其上载到GoDaddy web服务器,但这些文件的旧版本仍在加载。我清除浏览器缓存、禁用缓存、清除本地存储。。。我甚至打电话给GoDaddy技术支持来禁用CDN缓存,但它仍在加载旧文件,直到第二天(我发现了刷新模式……但我仍然不确定)。我甚至关闭了WordPress超级缓存。为什么JavaScript文件不能立即加载,我如何控制?