Общение с плагинами с веб-сервера

Возможно ли связываться с плагином из внешнего источника?

У меня есть веб-сервер Apache, настроенный с запуском wordpress, и я хотел бы иметь автоматическое вхождение от скрипта, запускающего действие в плагине.

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

Является ли это возможным? Я что-то пропустил?

Редактировать: Если кто-то нуждается в разъяснении, дайте мне знать, и я сделаю все возможное, чтобы объяснить по-другому. Я понял, что может быть неясно, откуда будет поступать внешний вход. Он будет полностью отделен от того, что происходит на веб-сайте, больше похоже на сценарий bash, выполняемый локально на сервере.

Edit2: Мой вопрос может быть дубликатом настройки страницы «прослушивания» API , но я не ограничиваюсь только HTTP-сообщением.

Edit3: Я также понял, что плагин, который я использовал, может помочь: (plugin.php)

$address = 'localhost'; $port = 8888; if(( $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) { error_log("socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"); } if(socket_bind($sock, $address, $port) === false ){ error_log("socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"); } if(socket_listen($sock, 5) === false){ error_log("socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"); } socket_set_nonblock($sock); do{ if(($msgsock = socket_accept($sock)) === false ){ error_log("socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"); } else{ do{ if( false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))){ error_log("socket_read() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"); } //Do things with buf socket_close($msg_socket); } while(true); } break; } while(true); socket_close($sock); 

Сейчас он ничего не делает, кроме как ждать подключения и читать 2048 байт, но когда он переходит к socket_accept, он получает сообщение об ошибке «Успех».

PHP-код в apache и, следовательно, wordpress, выполняется только как ответ на HTTP-запрос, поэтому вы не можете «ждать события», как вы пытаетесь сделать. Вам нужно либо вызвать требуемое действие через http, специально созданный URL-адрес или загрузить wordpress из CLI, и после того, как он загрузится, выполните ваш код. Вы можете посмотреть код утилиты CLI wordpress https://github.com/wp-cli/wp-cli, чтобы узнать, как можно сделать ir.

Если вам нужно, чтобы действие выполнялось независимо от любого действия посетителя, рассмотрите WP_Cron .

Вышеупомянутый способ:

  • Создайте функцию, которая вызывает что-то вне сервера. Пример: использование «curl» или REST или что-то еще.
  • Добавьте эту функцию как действие вроде:

     add_action( 'my_task_hook', 'my_task_function' ); 
  • Установите WordPress cron следующим образом:

     if ( ! wp_next_scheduled( 'my_task_hook' ) ) { wp_schedule_event( time(), 'hourly', 'my_task_hook' ); } 

Чтобы убедиться, что вышеупомянутое решение не учитывает активность посетителей. Это серверная (ваша) связь с сервером (сторонней) на основе автоматизированного использования через WordPress Cron Jobs.