Comunicando aos plugins do servidor web

É possível se comunicar com um plugin de uma fonte externa?

Eu tenho um servidor web apache configurado com o wordpress running, e eu gostaria de ter input automatizada de um script acionar uma ação em um plugin.

Pensei que no começo eu poderia ser capaz de fazer um plugin que escute um soquete para input e use ganchos para chamar as funções certas de outros plugins. Isso só fez com que o site nunca carregasse completamente.

É possível? Estou apenas perdendo alguma coisa?

Editar: Se alguém precisar de esclarecimento, avise-me e farei o meu melhor para explicar de forma diferente. Eu percebi que talvez não seja claro de onde seria a input externa. Seria completamente separado do que está acontecendo no site, mais como um script bash executado localmente no servidor.

Edit2: minha pergunta pode ser uma duplicação da configuração de uma página de “escuta” da API , mas não estou restrito apenas a uma postagem HTTP.

Edit3: Eu também percebi que o plugin que eu estava usando pode ajudar: (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); 

Agora, não faz nada, exceto para aguardar uma conexão e ler 2048 bytes, mas quando passa a socket_accept, ele recebe um erro “Sucesso”.

Solutions Collecting From Web of "Comunicando aos plugins do servidor web"

O código php no apache e, portanto, wordpress, é executado apenas como uma resposta a um pedido http, portanto você não pode “aguardar o evento” da maneira que você tenta fazer. Você terá que desencadear a ação requerida via http, um URL especificamente criado, por exemplo, ou carregar wordpress a partir da CLI, e depois de ter arrastado, execute seu código. Você pode ver o código do utilitário CLI da wordpress https://github.com/wp-cli/wp-cli para saber como ir pode ser feito.

No caso de você precisar que a ação ocorra independentemente de qualquer ação de visitante, considere WP_Cron .

Da forma acima, você poderia:

  • Crie uma function que chama algo fora do servidor. Ex: usando “curl” ou REST ou qualquer coisa.
  • Adicione essa function como uma ação como:

     add_action( 'my_task_hook', 'my_task_function' ); 
  • Configure WordPress cron como este:

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

Apenas para ter certeza, a solução acima não leva em consideração qualquer atividade de visitante. É uma comunicação de servidor (seu) para servidor (terceiro) com base em uma forma automatizada através do WordPress Cron Jobs.