Доступны ли другим функциям WP методы активированного плагина?

Пишу плагин с таким кодом:

Class MY_CLASS {
//codes
}
Global $myclass;
$myclass = New MY_CLASS ();

Могу ли я использовать этот класс после установки и активации плагина в других плагинах, не включая файл myclass.php? Например, в другом плагине:

Global $myclass;
$myclass->a = 'dog';
Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 4
  1. adrock42

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

    Plug-in 2

    class My_Class_Addon(){
    public function __construct() { }
    }
    
    add_action( 'plugins_loaded', 'My_Class_Addon_loader', 11 );
    function My_Class_Addon_loader(){
        if(empty($GLOBALS[ 'My_Class' ])){
            return;
        }
        $this_my_class = new My_Class_Addon();
    }
    
  2. fuxia

    Технически это возможно. Но я бы использовал немного другой подход. Если ваш второй плагин загружается первым, вы получаете ошибку. Если вы хотите заменить класс в другом плагине, это трудно сделать.

    Так что подключитесь к plugins_loaded с определенным приоритетом, чтобы создать объект, и используйте объект во втором плагине на том же хуке с более низким (более поздним) приоритетом:

    Плагин 1

    add_action( 'plugins_loaded', array ( 'My_Class', 'init' ), 10 );
    
    class My_Class
    {
        /**
         * Handler for the action 'init'. Instantiates this class.
         *
         * @since 0.1
         * @return void
         */
        public static function init()
        {
            // Именованная глобальная переменная для облегчения доступа к другим скриптам.
            $GLOBALS[ __CLASS__ ] = new self;
        }
        public function __construct() { /* Что то делать дальше. */ }
    }
    

    Плагин 2

    add_action( 'plugins_loaded', 'depending_operation', 11 );
    
    function depending_operation()
    {
        if ( empty ( $GLOBALS[ 'My_Class' ] ) )
        {
            return;
        }
        /* Что то делать снова. */
    }
    

    Обратите внимание на 10 и 11 в add_action (). Это гарантирует, что ваш второй плагин никогда не будет работать до первого. Он все еще должен проверить, если первый плагин активен и работает. Теперь вы можете даже заменить класс в другом плагине:

    Плагин 3

    add_action( 'plugins_loaded', 'replace_global_class', 12 );
    
    function replace_global_class()
    {
        $GLOBALS[ 'My_Class' ] = new Replacement_Class;
    }
    
    class Replacement_Class {}
    
    1. kaiser♦

      В любом случае, я бы лично использовал приоритет 9, потому что 10 является стандартным, а аргумент необязательным.

  3. Jan Fabry

    Только основной файл плагина будет включен автоматически. Так что, если ваш плагин структурирован так:

    • wp-content/plugins/my-plugin/
      • my-plugin.php
      • my-class.php

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

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: