所以基本上,如果你的插件是一个单独的 php 文件,那么一旦插件被安装和激活,文件中包含的所有功能和逻辑都可以被应用程序的其余部分访问。
然而,大多数插件并不是这样设计的。充当插件入口点的plugin filename 通常通过简单地包含它们或通过hooks 根据站点上发生的事件调用类和函数来加载插件目录中的其余文件。
因此,如果您只希望您的插件能够访问其自己的文件,您可以做一些事情。
首先,在主插件文件的顶部添加defined('ABSPATH') or die();。正如用户 Ifty 所写,“ABSPATH 是 wp-config.php 第 86 行中定义的常量。当 wordpress 尝试执行您的插件时,将定义 ABSPATH 常量。但是如果其他人尝试执行您的插件文件直接,ABSPATH 不会被定义,在这种情况下你的脚本不会被执行。”
这样可以保护您的文件不被直接在 Wordpress 上下文之外访问。
为了保护您的插件文件不受站点本身的其余部分影响,只需将您的主插件文件中的任何include 或require_once 语句或代码包装在一个仅根据您设置的条件调用的函数或类中。例如
<?php
/*
Plugin Name: Example plugin
Plugin URI: http://stackoverflow.com/
Version: 1.0
*/
defined('ABSPATH') or die();
add_action('your-custom-action', 'protector_function');
function protector_function(){
if ( current_user_can('manage_options') ) { //checks if user is admin you can use whichever conditions you want here
require_once plugin_dir_path( __FILE__ ) . 'filename-with-plugin-code.php';
// any other plugin code here
}
}
您可以定义自己的操作并使用do_action() (reference) 调用它,这样您就可以确保仅在整个应用程序中指定的位置调用您的插件代码。
Wordpress 插件的存在是为了扩展 Wordpress 的功能,因此如果您根本不希望以任何方式从 Wordpress 访问您的代码,我不确定插件是否是正确的解决方案。
希望这会有所帮助!