2016-01-22 97 views
1

我想在Wordpress中有条件地加载一个弹出窗口。弹出窗口在插件Popup Maker中配置,并具有“popmake-2503”的CSS类。有条件地在jQuery中打开WordPress的Popup Maker popup

我已经创建了我的主题的functions.php的一个功能,它加载有条件的脚本:

// open popup 
function open_popup() { 
if(is_user_logged_in() && is_page('checkout')) 
    { 
    wp_enqueue_script(
     'open-popup', 
     get_stylesheet_directory_uri() . '/open-popup.js', 
array('jquery') 
      ); 
     } 
    } 
add_action('wp_footer', 'open_popup'); 

在开popup.js文件,我有以下几点:

jQuery(document).ready(function($) { 
    alert ('running'); 
    $('#popmake-2503').popmake('open'); 
}); 

我已经阅读了API,但仍然不能弹出窗口,并且在控制台中没有显示错误。基本的javascript警报起作用。

谢谢。

EDIT1:周围的其他方法的工作原理,即,

$('#popmake-2503').popmake('close'); 

作品有效地关闭弹出它被自动加载后(如在弹出机构在WP管理员定义)。

回答

0

您尝试使用ID选择器#popmake-2503来抓取弹出式窗口,但是我的问题看到它具有类popmake-2503。所以试着改变这一行:

jQuery(document).ready(function($) { 
    alert ('running'); 
    $('.popmake-2503').popmake('open'); //class selector 
}); 
+0

谢谢。有什么改变了,是的。弹出窗口仍然不显示,但我从控制台得到以下错误:“Uncaught TypeError:无法读取未定义的属性'元'(它来自popup-maker-site.min.js插件文件)... – BMM

+0

由于他们的API,我相信我真的需要使用“#”来通过jQuery触发弹出窗口。 – BMM

+1

当然,如果你有一个id给你的元素,更好的方法是使用它进行选择。重要的是要正确选择项目。但是因为在你的问题中你没有提到选定的元素有一个id,而是显示类,我决定你没有正确选择需要的元素。你可以尝试调试你的代码,确保你通过放置'console来正确选择元素。日志($('#popmake-2503'),'test');'。如果你可以把你的代码放在某个地方,我可以试着帮助你更多:) – pgk

0

你可以避免使用jQuery。这允许在某些情况不正确时禁用插件。

add_action('wp', 'disablePopup'); 

function disablePopup() { 
    if (/*Some condition is not true*/) return remove_action('wp_enqueue_scripts', 'popmake_load_site_scripts'); 
} 
+0

完全不推荐。大多数用户不只有一个弹出窗口,这将有效地禁用所有弹出窗口。 OP似乎想要打开一个特定的弹出窗口。 –

1

你的解决方案是正确的,但目前弹出设备推迟加载JS所以前.popmake(“开放”)的功能已经被加载和初始化的弹出你的代码运行。

我们将尽快解决这一点,但尝试打开它之前添加一个短超时:

jQuery(document).ready(function($) { 
    setTimeout(function() { 
     $('#popmake-2503').popmake('open'); 
    }, 2000); 
}); 

或更好,但挂钩到pumInit事件像这样。这样一旦弹出窗口实际上准备好就会打开。这也是安全的,因为它使用了。对事件绑定

jQuery(document).on('pumInit', '#popmake-2503', function() { 
    PUM.open(2503); // Newer method than $('#popmake-2503').popmake('open'); and uses internal selector caching. 
}); 

而且在头加载最后,如果你想有一个可重复使用的解决方案,您可以create custom conditions可以在我们的弹出条件编辑器一起使用。你只需要一个条件来做真假&错误检查。下面的文档包含多个完整的例子,你可以使用:

PS我对PM的首席开发人员,所以这是事实上的最好的答案;)

+0

对我来说,延迟作品,听众不会。我没有足够的技巧来得到原因。 – ramonztro

+0

由于某些奇怪的原因,使用延迟方法打开后,弹出窗口会自动关闭。 – TheYaXxE

+0

我们使用Popup Maker的最新下载(并​​且喜欢它,顺便说一句)。 对于上面的事件监听器方法,当我们传入第二个参数('#popmake-2503')时,我没有得到事件。如果我们在没有显式ID的情况下定位pumInit事件,它将起作用。 – mattLummus