Как вызвать функцию из одного плагина внутри другого плагина?

30 июн. 2012 г., 21:01:36
Просмотры: 30.1K
Голосов: 8

У меня есть базовый плагин в панели администратора для событий.

Я хочу вызвать функцию из другого плагина для социальных сетей (Mingle). Я могу вызывать функции плагина в теме, но, похоже, не могу делать это внутри основных файлов других плагинов или в их административных панелях.

Я пробовал подключать файлы другого плагина, добавлять хук в файл functions.php темы, использовать add_action, add_filter, init и т.д. Но я не знаю, каким должен быть первый аргумент для этих действий, так как я хочу вставить функцию на определенную административную страницу из другого плагина.

Единственное решение, которое сработало - это объединение кода двух плагинов, хотя кажется странным, что нет более простого метода.

1
Комментарии

Также оба плагина объявляют свои функции в классе

Graham Graham
30 июн. 2012 г. 21:14:12
Все ответы на вопрос 2
0
11

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

Плагин A

class PluginA {
  public function func_a() {
    // выполнить действия
  }
}

Плагин B

class PluginB {
  function functB() {
    if (class_exists('PluginA')) {
      // выполнить действия, зависящие от PluginA
    }
  }
}

add_action('plugins_loaded', 'call_plugin_a_using_plugin_b');
function call_plugin_a_using_plugin_b() {
  PluginB::functB();
}

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

19 авг. 2016 г. 18:37:44
0

Чтобы вызвать функцию из одного плагина в другом плагине (инцепция?), можно попробовать следующий подход:

Перед выполнением каких-либо действий проверьте наличие нужной функции.

Плагин A:

function from_plugin_alpha( some_thing ) {
    // выполняем действия
}

Плагин B:

function from_plugin_bravo() {
    if ( !function_exists( 'from_plugin_alpha' ) ) {
        return;
    }
    from_plugin_alpha( some_thing );
}

Этот код проверяет существование функции перед выполнением вашего пользовательского кода.

19 авг. 2016 г. 17:45:04