我们正在制作一个WordPress插件,它用一个短代码生成一个iframe,并且不管它在哪个站点、页面或主题上使用,iframe都应该工作并显示相同的内容。视图位于插件文件夹中的URL。
同样,插件的样式和脚本不应该影响整个站点。
我不知道怎样才是正确的隔离方式。一种方法是不使用wp_head()或wp_footer(),直接将样式和脚本放在HTML中,而不是对它们进行排队。
这是可行的,但我不禁想知道,是否会有更好的"WordPress方式“来做到这一点。
我还想只在这个URL上对每个脚本和样式表进行大规模的排队,但是主题仍然可以使用钩子注入任意的HTML。
什么是正确的方法,以获得一个“干净的板子”工作为我的插件页面?
发布于 2019-03-17 05:51:02
最好不要直接加载插件URL (除非它是公共URL,并且您可以以查询字符串的形式传递所需的任何数据),因为这使得加载WordPress和访问任何存储的数据变得困难(因为路径并不总是可确定的),而是:
选项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
https://wordpress.stackexchange.com/questions/331770
复制相似问题