плагин WordPress - как мне сделать так, чтобы только мой плагин мог получить доступ к своим собственным файлам - PullRequest
0 голосов
/ 17 февраля 2019

Я разрабатываю плагин для WordPress и мне было интересно, как я могу сделать так, чтобы только мой плагин мог получить доступ к своим собственным файлам.в основном искал что-то похожее на это:

defined('ABSPATH') or die();

Кажется, я когда-то видел нечто подобное в чьем-то плагине elses:

defined('PLUGINNAME') or die();

Я не понял, как это работает, но былоинтересно, есть ли что-нибудь подобное, что позволит моему плагину только "require_once (plugin_dir_path (__ FILE __). 'secondpluginfile.php');"свои собственные файлы.(пробелы между __ и FILE, потому что в противном случае stackoverflow пытается сделать его жирным шрифтом) Не уверен, встроено ли это ограничение в wordpress (вероятно, нет, потому что некоторые плагины имеют надстройки), или мне нужно что-то добавить, чтобы это произошло.я просто помещаю имя плагина или что-то в функцию "define ()", или мне нужно сначала что-то настроить?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Таким образом, в принципе, если ваш плагин представляет собой один php-файл, все функции и логика, включенные в файл, будут доступны для остальной части приложения после установки и активации плагина.

Однако большинство плагинов не спроектированы таким образом. имя файла плагина , которое действует как точка входа в ваш плагин, обычно загружает остальные файлы в каталоге плагинов, просто включая их или вызывая классы и функции на основе событий, происходящих на сайте через крючки .

Итак, если вы хотите, чтобы только ваш плагин мог иметь доступ к своим собственным файлам, вы можете сделать несколько вещей.

Прежде всего, добавьте defined('ABSPATH') or die(); вверху основного плагина.файл.Как писал пользователь Ifty, «ABSPATH - это константа, определенная в строке 86 wp-config.php. Когда 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 ), чтобы гарантировать, что ваш код плагина вызывается только там, где вы указали в течениеapplication.

Плагины Wordpress существуют для расширения функциональности Wordpress, поэтому, если вы вообще не хотите, чтобы ваш код был доступен из Wordpress, я не уверен, что плагин является правильным решением.

Надеюсь, это поможет!

0 голосов
/ 17 февраля 2019

Вы можете поставить

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...