As funções WordPress dão erro fatal no arquivo php incluído

Primeiro, meu problema é semelhante a esse tópico . No entanto, a solução postada não funciona para mim.

Estou criando um plugin que exibe um formulário de contato em uma página usando a API Shortcode.

Conteúdo da pasta do plugin:

  • contact.php (arquivo principal do plugin)
  • validate.php (arquivo php incluído)

O arquivo principal possui o header de plugin usual, e as funções do WordPress chamadas no trabalho funcionam como esperado [ie: get_permalink ()]

O arquivo validate.php está incluído em contact.php da seguinte maneira:

define ("PLUGIN_PATH", plugin_dir_path(__FILE__)); include_once dirname( __FILE__ ) . '/validate.php'; 

Meu problema é que todas as funções do WordPress chamadas em validate.php lançarão um erro fatal. Funções do PHP funcionam como esperado, apenas as funções do WordPress estão jogando um erro fatal:

 Fatal error: Call to undefined function sanitize_text_field() in /{FULL WEBSITE PATH}/ralrom-contactform/validate.php 

Como devo include o arquivo validate.php para poder chamar as funções do WordPress?

Tentei “exigir” e “include” variações e todos lançam o mesmo erro fatal.

Antes de usar vários arquivos, eu tinha uma versão funcional como um único arquivo mostrado aqui:

Código de trabalho original em um único arquivo php: http://pastebin.com/qM5aj9qY

Código quebrado em dois arquivos php: http://pastebin.com/KUCbg6rJ

Solutions Collecting From Web of "As funções WordPress dão erro fatal no arquivo php incluído"

Você está postando o formulário para o arquivo validate.php diretamente, então o código do WordPress não está carregado. Em vez disso, você precisa POSTAR o formulário para o URL atual ou o home_url ou algo assim e, em seguida, faça o plugin interceptar os dados e agir em conformidade, de modo que o código WordPress seja carregado antes de usar suas funções.

Graças aos comentários, percebi que o que estava tentando fazer não era exatamente possível.

A razão pela qual POSTing dados para uma página php enviará os dados POST fora do loop ou “framework” do WordPress. Portanto, as funções do WordPress não são carregadas. Uma maneira de contornar isso é exigir os arquivos wordpress que contenham as funções que deseja usar dentro da sua página php, ou seja:

 require_once {path to wordpress wp-includes}/formatting.php; 

No entanto, senti que era uma maneira suja de fazer as coisas.

Em vez disso, segui a sugestão de Otto e interceptei os dados do POST antes que o WordPress carregasse a página anexando uma function ao gancho “init”:

 add_action("init", "intercept_post"); 

A ação do formulário está configurada para a página atual e na function intercept_post eu executo a validação de dados, envie o email e redirecione para a mesma página. Isso efetivamente envia os dados POST e impede que uma atualização de página seja enviada novamente.