10
respostas

Inserção de dados na plataforma wordpress.

olá Alura,

estou com uma duvida aqui. Estou tendo problema para inserir dados no banco de dados do site , que estou trabalhando. Acontece que eles usam wordpress, e se usar o código no editor classico, o codigo quebra. Eu olhei um plugin chamado "WpCode" e eles trabalham com a ferramenta "snippet code".

Depois de preparar o campo do formulario, codigo é usado de forma inteira sem a divisão dos arquivos, as classes estão no mesmo arquivo ou aqui é "snippet code". Para manter a organização eu mantive as classes, só que não esta sendo inseridos os valores.

Código esta no arquivo - wordpressCurriculo.php

link do github: git@github.com:tiagobrandao03/pcd_curriculo.git

10 respostas

Oi Tiago!

Entendi o seu problema! Quando você está trabalhando com o WordPress e tentando inserir código diretamente no editor, pode acontecer da estrutura do código se perder ou até ser bloqueada por algum filtro de segurança, principalmente quando você está lidando com bancos de dados.

Eu vejo que você mencionou o uso do WPCode, que é uma excelente ferramenta para gerenciar snippets de código no WordPress. Ela permite inserir trechos de código diretamente no site sem causar esse tipo de problema que você está enfrentando no editor clássico.

Aqui estão algumas dicas para te ajudar a resolver esse problema:

1. Usando WPCode de Forma Correta

Se você estiver criando um snippet de código no WPCode, ele deve ser inserido na área correta de hooks ou de templates, sem precisar misturar com a estrutura do tema principal. Em vez de inserir o código diretamente no arquivo do tema, use o WPCode para criar um snippet que seja chamado em uma das áreas apropriadas, como um hook específico do WordPress.

2. Organização do Código

Manter as classes e funções organizadas dentro do snippet pode ser uma boa ideia, mas cuidado para não sobrecarregar o arquivo. Quando você for trabalhar com a inserção de dados no banco de dados, sempre utilize funções nativas do WordPress como wpdb->insert() para garantir que o processo de inserção seja seguro e eficiente. Isso ajuda a evitar que o código quebre ou cause vulnerabilidades no banco de dados.

Aqui vai um exemplo de como você pode inserir dados no banco de dados usando o wpdb:

global $wpdb;

$table = $wpdb->prefix . 'nome_da_tabela'; // Prefixo do WordPress
$data = array(
    'campo1' => sanitize_text_field($_POST['campo1']),
    'campo2' => sanitize_text_field($_POST['campo2']),
);
$format = array('%s', '%s'); // Define o formato dos dados (ex: %s para string)

$wpdb->insert($table, $data, $format);

3. Checando o WPCode

No WPCode, você pode criar snippets diretamente do painel do WordPress e definir onde ele será executado. Por exemplo, se for para um formulário que está na área de administração, você pode usar o hook admin_post para capturar os dados e inserir no banco de dados.

Exemplo básico de um hook para capturar o formulário:

add_action('admin_post_nome_da_acao', 'minha_funcao_para_inserir_dados');

function minha_funcao_para_inserir_dados() {
    // Sua lógica de inserção no banco de dados
    wp_redirect(home_url()); // Redireciona após a inserção
    exit;
}

4. Verifique os Erros

Como o código não está inserindo os valores, uma dica importante é ativar o modo de depuração no WordPress para verificar se há algum erro sendo gerado durante a inserção. Para isso, adicione o seguinte no arquivo wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Isso irá gerar um log de erros no arquivo wp-content/debug.log, que pode te ajudar a identificar onde o problema está acontecendo.

5. GitHub

Se precisar de ajuda com o código específico, eu daria uma olhada no seu repositório no GitHub, mas por questões de segurança, é melhor revisar o código diretamente no ambiente de desenvolvimento, já que links do GitHub privados podem ter restrições de acesso.

Espero que essas dicas te ajudem a seguir em frente com o seu projeto! Se continuar com dificuldades, me avise e podemos ir ajustando!

Olá Alura,

eu passei os dados e não deu certo:

<?php
$other_db_name = "";
$other_db_user = "";
$other_db_password = "";
$other_db_host = "";

$other_db = new wpdb($other_db_user, $other_db_password, $other_db_name, $other_db_host);
$other_db->set_prefix("wp_");

global $wpdb;

$table = $wpdb->prefix . 'wp_curriculos'; // Prefixo do WordPress

 $dataString = $_POST['criado_em'];
    $dataTime = new DateTime($_POST['criado_em']);

$data = array(
    'nome' => sanitize_text_field($_POST['nome']),
    'email' => sanitize_text_field($_POST['email']),
    'contato' => sanitize_text_field($_POST['contato']),
    'nome' => sanitize_text_field($_POST['nome']),
    'idade' => sanitize_text_field($_POST['idade']),
    'genero' => sanitize_text_field($_POST['genero']),
    'raca' => sanitize_text_field($_POST['raca'),
    'estado'=> sanitize_text_field($_POST['estado'),
     'estado'=> sanitize_text_field($_POST['estado'),
     'deficiencia'=> sanitize_text_field($_POST['deficiencia'),
     'cid'=> sanitize_text_field($_POST['cid'),
     'limitacao'=> sanitize_text_field($_POST['limitacao'),
     'laudo'=> sanitize_text_field($_POST['laudo'),
     'cargo'=> sanitize_text_field($_POST['cargo'),
     'interesse'=> sanitize_text_field($_POST['interesse'),
      'formacao'=> sanitize_text_field($_POST['formacao'),
      'expectativa_salarial'=> sanitize_text_field($_POST['expectativa_salarial'),
      'modelo_trabalho'=> sanitize_text_field($_POST[ 'modelo_trabalho'),
       'regime_trabalho'=> sanitize_text_field($_POST['regime_trabalho'),
       'preferencia_contato'=> sanitize_text_field($_POST['preferencia_contato'),
       'redes_sociais'=> sanitize_text_field($_POST['redes_sociais'),
);
$format = array('%s', '%s'); // Define o formato dos dados (ex: %s para string)

$wpdb->insert($table, $data, $format);

Olá,Tiago. Algum erro é gerado? Se sim, qual? Pode mandar um print?

Acontece o seguinte, os dados não são inseridos.

A mostrar registos de 0 - 24 (3577 total, A consulta demorou 0.0010 segundos.) SELECT * FROM wp_curriculos

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Tiago, qual o passo a passo você está fazendo para testar o código? Está usando algum formulário wordpress para preencher e enviar para o banco? É gerado algum erro no terminal?

Como é um projeto pessoal seu, não tenho todos os detalhes, então, quanto mais informações você me passar, vai ficar mais rápido de te ajudar e rodar seu código no meu computador para verificar o erro.

Para testar o código estou usando:

  • o Elementor, com a ferramenta de inserção de html;
  • shortcode uma ferramenta do wpcode ;
  • No admin estou usando o Wpcode, neste wpcode eu faço a inserção dos codigos das classes(Curriculos,curriculorepositorio e o restante de codigo php que está na pagina index); -Eu faço a verificação dos dados, apartir do phpmyadmin, o servidor, onde o site esta hospedado.

Eu vou deixar o nome do servidor e a tabela do banco de dados:

servidor:bdpcdforms banco de dados:bdpcdforms tabela:wp_currículos

Na ferramenta de inserção de html , eu inserir um formulario html, com ids e uma ferramenta de de formatação de sites(boostrap).

O erro que está acontecendo, é que no editor clássico, quando você insere o codigo direto, da erro. O codigo de back end só é inserido através do snippet code(Wpcode).

Insira aqui a descrição dessa imagem para ajudar na acessibilidade `` Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Ai esta as imagens

vou deixar o link do github aqui:

git@github.com:tiagobrandao03/pcd_curriculo.git

Salve, Tiago!

Já experimentou usar um plugin específico para formulários ao invés de "fazer na mão"?

O Wordpress é extensível, mas esse tipo de abordagem pode se tornar difícil de manter e abrir brechas de segurança.

Você pode, por exemplo, usar o plugins:

E assim a construção do formulário vai ser toda feita via painel administrativo do Wordpress - e nenhum código PHP será necessário.

Ola vinicius Neves, os Wpforms geralmente são limitados e so acessam o email. Aqui eu preciso acessar uma tabela exclusiva. Se fosse usar uma email normal, jpa teria feito. É algo especifico e o Wpform é limitado.

Ele faz tb!

Olha: https://wpforms.com/how-to-save-your-contact-form-data-in-wordpress-database/

Ok. Eu vou dar uma testada aqui e volto a postar aqui.