簡體   English   中英

wordpress插件-如何制作,因此只有我的插件才能訪問自己的文件

[英]wordpress plugin - how do I make it so only my plugn can access its own files

我正在開發一個wordpress插件,想知道如何制作它,以便只有我的插件才能訪問它自己的文件。 基本上是在尋找類似的東西:

defined('ABSPATH') or die();

我想我曾經在其他人的插件中看到過類似的內容:

defined('PLUGINNAME') or die();

我不知道它是如何工作的,但是我想知道是否有任何類似的東西只能使我的插件“ require_once(plugin_dir_path(__ FILE __)。'secondpluginfile.php');”; 它自己的文件。 (__和FILE之間的空格,因為否則stackoverflow會嘗試使其變為粗體)。不確定此限制是否內置於wordpress中(可能不是因為某些插件具有加載項),或者是否必須添加一些內容才能實現此目的。 我只是將插件名稱或某些內容放入“ defined()”函數中,還是需要先進行設置?

你可以放

defined('ABSPATH') or die();

在您的插件代碼的開頭。 實際上,它所做的是檢查是否定義了ABSPATH 如果未定義,它將執行die()並停止執行您的插件文件。

ABSPATH是在wp-config.php第86行中定義的常量。當wordpress嘗試執行您的插件時,將定義ABSPATH常量。 但是,如果其他人嘗試直接執行您的插件文件,則不會定義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插件 您可以看一下他們的源代碼。 據我所知,這個插件是隨wordpress軟件包一起提供的。

因此,基本上,如果您的插件是單個php文件,則在安裝並激活插件后,應用程序的其余部分將可以訪問文件中包含的所有功能和邏輯。

但是,大多數插件並非以這種方式設計的。 充當插件入口點的插件文件名通常通過簡單地包括它們或根據通過掛鈎發生在站點上的事件來調用類和函數來將其余文件加載到插件目錄中。

因此,如果只希望插件能夠訪問其自己的文件,則可以做一些事情。

首先,添加defined('ABSPATH') or die(); 在主插件文件的頂部。 正如用戶Ifty所說,“ ABSPATH是在wp-config.php第86行中定義的常數。當wordpress嘗試執行您的插件時,將定義ABSPATH常數。但是,如果其他人嘗試直接執行您的插件文件,則ABSPATH將未定義,在這種情況下您的腳本將不會執行。”

這樣可以防止您的文件在Wordpress上下文之外直接訪問。

為了保護您的插件文件免受網站其他部分的require_once ,只需將所有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訪問您的代碼,我不確定插件是正確的解決方案。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM