Utilização do WP_Filesystem dentro de um bloco de código

O que estou tentando fazer é que esta function funcione no meu bloco de código de plugin sem ter como plug-in.

Minha solução atual e funcional fora do wordpress é

Salvar conteúdo

$KeepText="$name||$Phone||"; $dataHolder="keepdata.txt"; $file = fopen($dataHolder,"w"); if(fwrite($file, $KeepText)){echo "Data Saved Successfully !";} else{echo "Error Occur !";} fclose($file); 

Recuperar dados

 $dataHolder="keepdata.txt"; $dataPool=file($dataHolder); $TextPool=explode("||", (string)$dataPool[0]); if ($dataPool) { $ContactName=$TextPool[0]; $ContactPhone = $TextPool[1]; } 

Saída // ContactName // ContactPhone

A lógica imprimirá perfeitamente todos os dados necessários.

No entanto, fazer o mesmo no WordPress gerar erros ou mesmo não fazer eco de dados.

Encontrei soluções recomendadas que sugeriam o uso do WP_Filesystem. A partir deste site eu tentei em que funciona bem como um plugin autônomo. Mas essa não é a solução que eu quero.

O que eu gostaria de fazer é ter o wp_filesystem como este sem admin_menu ().

 function filesystem_init($form_url, $method, $context, $fields = null) { global $wp_filesystem; if (false === ($creds = request_filesystem_credentials($form_url, $method, false, $context, $fields))) { return false; } if (!WP_Filesystem($creds)) { request_filesystem_credentials($form_url, $method, true, $context); return false; } return true; } 

E depois tenha a function dataTosave(){} como a abaixo

 function dataTosave($form_url){ global $wp_filesystem; check_admin_referer('contact_form'); $contactname = sanitize_text_field($_POST['contactname']); $contactphone = sanitize_text_field($_POST['contactphone']); $form_fields = array('contactname','contactphone'); $method = ''; $context = WP_PLUGIN_DIR . '/keepdata'; $form_url = wp_nonce_url($form_url, 'contact_form'); if(!filesystem_init($form_url, $method, $context, $form_fields)) return false; $target_dir = $wp_filesystem->find_folder($context); $target_file = trailingslashit($target_dir).'/keepdata.txt'; $dataTosave=$contactname."||".$contactphone."||"; if(!$wp_filesystem->put_contents($target_file, $dataTosave, FS_CHMOD_FILE)) return new WP_Error('writing_error', 'Error when writing file'); return "Data Saved"; } 

Uma vez que o formulário é postado

  if(isset($_POST['contactform_submit'])){ dataTosave(); //new submission run the function } 

<input id="contactname" name="contactname" value="" require >
<input id="contactphone" name="contactphone" value="" required >

Eu tenho isso assim, mas sem sorte. Obrigado

Solutions Collecting From Web of "Utilização do WP_Filesystem dentro de um bloco de código"

Ler e escrever para um arquivo vai ser perigoso. Você vai estar lutando com permissions de arquivo se você salvar em qualquer lugar, exceto o diretório wp-content/uploads (e parece que deseja salvar no diretório de plugins). Se você tiver o controle suficiente do servidor, você pode conseguir isso funcionando editando permissions no diretório de plugins, mas não o faria . Ele apresenta, potencialmente, problemas de segurança. De qualquer forma, exigir que as permissions de diretório sejam editadas fará seu código muito não-portátil.

  1. Você pode salvar seu arquivo em wp-content/uploads mas pode ser acessível para bisbilhotar.
  2. Você pode usar o WP_Filesystem mas você precisará obter o request_filesystem_credentials() mais provável. Eu não sei o que você quer dizer com o uso dele sem admin_menu() mas estou pensando que você quer dizer sem o diálogo. Se eu me lembro corretamente, se as credenciais do hardcode para wp-config.php você não receberá o diálogo pop-up . Você pode exigir que os usuários editem arquivos, o que torna seu código menos portátil.
  3. A melhor opção para mim é simplesmente não tentar manipular dados dentro e fora de um arquivo. Salve seus dados como meta do usuário no database.