Suporte » Desenvolvendo com WordPress » Conectar ao DB WordPress e gravar dados.

  • Caros amigos,

    Preciso gravar o e-mail do usuário quando este enviar um e-mail através de formulário de contato. Então criei uma tabela chamada mala_list dentro do DB onde estão as tabelas do Woprdpress.

    Pois bem, em sites em PHP uso este código abaixo. Gostaria de saber como ficaria esse código no WordPress pois nunca fiz isso e não tenho tanto experiência em WordPress.

    É possível puxar os dados de conexão do arquivo wp-config.php?

    // host, usuário e senha
    $conecta = mysql_connect("localhost","usuario","senha");
    if (!$conecta)
      {
      die('Erro: ' . mysql_error());
      }
    
    // nome do banco
    mysql_select_db("meubanco", $conecta);
    
    $sql1 = "SELECT email from mala_list where email = '$email'";
    $resultado1 = mysql_query($sql1, $conecta);
    
    //Verifica se o e-mail existe, se não existe cadastra
    if(mysql_num_rows($resultado1) > 0) {
    } else {
    $data_cadastro = date("d/m/Y G:i:s");
    $ip_remetente = $_SERVER['REMOTE_ADDR'];
    mysql_query("INSERT INTO mala_list (email, nome, date_in, ip) VALUES ('$email', '$name', '$data_cadastro', '$ip_remetente')");
    }
    
    mysql_free_result($resultado1);
    mysql_close($conecta);

    Obrigado pela atenção de todos.

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • insideinside,

    dentro do WP você não precisa recriar a conexão. O WP tem funções nativas para fazer todo tipo de leitura e gravação de dados.

    Normalmente, também, para casos simples como gravar uma lista de emails, o ideal é usar a tabela wp_options (caso a lista seja global) ou wp_postmeta (se ela for relativa a um post/página/conteúdo específico).

    Para gravar na página onde está o formulário, eu faria algo assim, no functions.php:

    add_action('template_redirect','wp2201_salvar_email');
    
    function wp2201salvar_email() {
    
      if(is_page('nome-da-pagina') && $_POST['email']) {
        $mail = get_post_meta($post->ID, 'cadastro', $_POST['email'] )
    
        if($mail != $_POST['email']) {
            $resp = update_post_meta($post->ID, 'cadastro', esc_attr($_POST['email']));
        } else {
            $resp = 'Email já cadastrado';
        }
    
          return $resp;
      }
    
    }

    Esse código intercepta o carregamento da página na action template-redirect e, se estiver na pagina correta, confere se o email já está cadastrado. Se não estiver, cadastra e retorna o ID da entrada. Se sim, retorna o erro.

    O email então foi salvo na tabela wp_postmeta, identificado pelo ID da página onde estava o formulário e pela chave “cadastro”.

    Caro Ricardo

    Primeiramente, obrigado pela ajuda.

    Eu não tenho tanta experiência quanto você rsrs É difícil entender o código.

    Seria mais fácil incluir algo no arquivo template-contact.php.

    Tem que ser no padrão que eu escrevi aima, porém não sei como chamar a conexão via WordPress.

    A tabela tem que ser a parte ao WordPress por isso cria a tabela “mala_list”.

    E também não pode haver nenhuma mensagem na tela. Informando se cadastrou ou não.

    Obrigado pela atenção.

    Você pode usar a global $wpdb para fazer qualquer consulta/operação no banco, sem precisar abrir/fechar conexões. Ela funciona de forma parecida com um PDO do PHP, exemplo:

    $wpdb->query(
    	$wpdb->prepare(
    		"
                    DELETE FROM $wpdb->postmeta
    		 WHERE post_id = %d
    		 AND meta_key = %s
    		",
    	        13, 'gargle'
            )
    );

    Só tome cuidado pra não reinventar a roda.

    Caro Ricardo,

    Seria isso aqui o código correto?

    $data_cadastro = date("d/m/Y G:i:s");
    $ip_remetente = $_SERVER['REMOTE_ADDR'];
    
    $wpdb->insert(
    	'mala_list',
    	array(
    		'email' => $email,
    		'nome' => $nome,
    		'data_cadastro' => $data_cadastro,
    		'ip_remetente' => $ip_remetente
    	),
    	array(
    		'%s',
    		'%d',
    		'%e',
    		'%g'
    	)
    );

    Se estiver certo, como faço agora para verificar se o e-mail já existe na tabela?

    Obrigado pela atenção.

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • O tópico ‘Conectar ao DB WordPress e gravar dados.’ está fechado para novas respostas.