保护插件弹出窗口

时间:2019-05-31 作者:John Crest

我有一个插件,它可以打开一个弹出窗口并在其中显示内容,不使用任何默认的wordpress主题/样式等。

我的问题是,确保访问此窗口的最佳方式是什么?此时,如果用户将地址复制/粘贴到浏览器中,它将显示内容。我希望它只对以管理员身份登录的用户可见。

然而,当我向插件登录页添加一些基本安全性时,它会影响整个网站,而不仅仅是插件页:

my-plugin.php (located in /wp-content/plugins/my-plugin)

function check_logged_in() {
    if(!is_user_logged_in()){
        die(\'foo\');
    }
}
add_action( \'wp_loaded\', \'check_logged_in\' );
无论我是访问插件页面还是网站上的任何其他页面,都会执行此操作。我希望它只适用于插件中的插件/子目录(即将适用于mysite.com/plugin/view-orders,但不适用于mysite.com/contact)

1 个回复
SO网友:majick

在插件文件中添加一些AJAX操作,如下所示。。。第一个(无_nopriv) 将仅对登录用户执行,第二个将仅对注销用户执行,因此无需重新测试is_user_logged_in() 此处:

add_action(\'wp_ajax_show_popup_contents\', \'show_popup_contents\');
function show_popup_contents() {
    $filepath = dirname(__FILE__).\'/popup.php\';
    include($filepath); exit;
}

add_action(\'wp_ajax_nopriv_show_popup_contents\', \'deny_popup_contents\');
function deny_popup_contents() {
    wp_die("You need to be logged in to view these contents.");
}
然后将弹出式URL设置为/wp-admin/admin-ajax.php?action=show_popup_contents

您可能还想添加if (!defined(\'ABSPATH\')) {exit;} 在包含的popup.php 文件,因此无法通过这种方式直接访问。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。