完全隔离插件视图,这样它就不会加载主题

时间:2019-03-15 作者:Ariane

我们正在制作一个WordPress插件iframe 有一个短代码iframe 无论在哪个网站、页面或主题上使用,它都应该工作并显示相同的内容。该视图位于插件文件夹中的URL处。

同样,插件的样式和脚本不应该影响整个站点。

我不确定什么是正确的隔离方式。一种方法是不使用wp_head()wp_footer() 并将我的样式和脚本直接放入HTML中,而不是将它们排队。

这是可行的,但我忍不住想知道是否有更好的“WordPress方式”可以做到这一点。

我还想过只在这个URL上对每个脚本和样式表进行大规模出列,但主题仍然可以使用挂钩自由注入任意HTML。

为我的插件页面获得“干净的记录”的正确方法是什么?

1 个回复
SO网友:majick

最好不要直接加载插件URL(除非它是一个公共URL,并且你可以将任何需要的数据作为查询字符串传递),因为这使得加载WordPress和访问任何存储的数据都很困难(因为路径并不总是可确定的),而是:

通过查询字符串加载视图,并在WordPress load或类似程序中进行检查,但将其添加到AJAX操作查询字符串函数中选项1。通过/any-page/?my-action=trigger

add_action(\'init\', \'my_plugin_view\');
function my_plugin_view() {
    // check for querystring trigger
    if (!isset($_REQUEST[\'my-action\']) || ($_REQUEST[\'my-action\'] != \'trigger-value\')) {return;}

    if (!is_user_logged_in()) {
       wp_die(\'You need to be logged in to do this.\');
    } else {
        // ... plugin view output code ...
    }
    exit;
}
选项2。通过/wp-admin/admin-ajax.php?action=my_plugin_view

// logged in users
add_action(\'wp_ajax_my_plugin_view\', \'my_plugin_view\');

function my_plugin_view() {
    // ... plugin view output code ...
    exit;
}

// logged out users (optional) 
add_action(\'wp_ajax_nopriv_my_plugin_view\', \'my_plugin_view\');
function my_plugin_logged_out_message() {
    wp_die(\'You need to be logged in to do this.\');
}
正如您所看到的,所使用的目标URL以及处理注销用户的方式存在差异(如果需要,在本例中,假设用户必须登录,但这种差异对于完全公开的视图不是必需的。)

两者都是可行的选择,但AJAX方法可能是更常见的“WordPress方式”。当然,任何插件脚本和样式都需要直接添加到输出中,而不是像往常一样将它们排队。

法典参考:AJAX in Plugins

相关推荐

正在尝试链接到新文件夹中的自定义css文件

我正在尝试链接到一个小插件的新文件夹中的自定义css文件。我似乎无法让它发挥作用。这是我的台词echo \'<link rel=\"stylesheet\" href=\"\' . esc_url( plugins_url( \'public/css/front-end/uwc-tabs-style.css\', __FILE__)) . \'\" >\'; 我也试过以下方法,但都不管用。echo \'<link rel=\"stylesheet\" href=\"\' .