【问题标题】:wordpress plugin - how do I make it so only my plugn can access its own fileswordpress 插件 - 我如何制作它,以便只有我的插件可以访问它自己的文件
【发布时间】:2019-02-17 07:05:09
【问题描述】:

我正在开发一个 wordpress 插件,想知道如何制作它,这样只有我的插件才能访问它自己的文件。基本上是在找类似这样的东西:

defined('ABSPATH') or die();

我想我曾经在别人的插件中看到过这样的东西:

defined('PLUGINNAME') or die();

我不明白它是如何工作的,但想知道是否有类似的东西只允许我的插件“require_once(plugin_dir_path(__ FILE __).'secondpluginfile.php');”自己的文件。 (__ 和 FILE 之间的空格,否则 stackoverflow 会尝试使其变为粗体)不确定此限制是否内置于 wordpress 中(可能不是因为某些插件具有附加组件),或者我是否必须添加一些东西才能实现这一点。我只是将插件名称或其他东西放在“defined()”函数中,还是需要先设置一些东西?

【问题讨论】:

    标签: php wordpress plugins


    【解决方案1】:

    所以基本上,如果你的插件是一个单独的 php 文件,那么一旦插件被安装和激活,文件中包含的所有功能和逻辑都可以被应用程序的其余部分访问。

    然而,大多数插件并不是这样设计的。充当插件入口点的plugin filename 通常通过简单地包含它们或通过hooks 根据站点上发生的事件调用类和函数来加载插件目录中的其余文件。

    因此,如果您只希望您的插件能够访问其自己的文件,您可以做一些事情。

    首先,在主插件文件的顶部添加defined('ABSPATH') or die();。正如用户 Ifty 所写,“ABSPATH 是 wp-config.php 第 86 行中定义的常量。当 wordpress 尝试执行您的插件时,将定义 ABSPATH 常量。但是如果其他人尝试执行您的插件文件直接,ABSPATH 不会被定义,在这种情况下你的脚本不会被执行。”

    这样可以保护您的文件不被直接在 Wordpress 上下文之外访问。

    为了保护您的插件文件不受站点本身的其余部分影响,只需将您的主插件文件中的任何includerequire_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 访问您的代码,我不确定插件是否是正确的解决方案。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      你可以放

      defined('ABSPATH') or die();
      

      在插件代码的开头。实际上它的作用是检查是否定义了ABSPATH。如果它没有被定义,那么它将执行die() 并停止执行你的插件文件。

      ABSPATH 是在wp-config.php 第 86 行定义的常量。当 wordpress 尝试执行您的插件时,ABSPATHconstant 将被定义。但是如果其他人尝试直接执行您的插件文件,ABSPATH 将不会被定义,在这种情况下您的脚本将不会被执行。

      实现相同结果的另一种方法是检查add_action 函数。

      if ( !function_exists( 'add_action' ) ) {
          echo 'Hi there!  I\'m just a plugin, not much I can do when called directly.';
          exit;
      }
      

      代码参考:Akismet Plugin。你可以看看他们的源代码。据我所知,这个插件带有 wordpress 包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        相关资源
        最近更新 更多