Bu yazımda Elementor Form Verilerini Farklı Veritabanına Kaydetmek konusunda bakacağız. Aslında önceki iki yazım ile bu yazıya hazırlık yapmış olduk. Aslında amacım bu işlemi yapmaktı. Hadi gelin bu işi çözelim.
Başlamadan önce Discord sunucuma katılmayı unutmayın. :D
Elementor Form Verilerini Farklı Veritabanına Kaydetmek
2022 yılı benim için webe geçiş dönemli oldu. Wordpress hakkında zaten bilgim vardı ama elementor bilmiyordum. Onu da öğrenip onlarca site yaptıktan sonra web sitelerinin form datalarını almak bir iş haline geldi. Bende özellikle bir müşterimizin işini yaparken, web sitesinden gelen form verilerin özel bir panelde gösterilmesi işlemi çıkınca bu konuya ihtiyaç duydum. Yani Elementor Form larını MySQL DB’ye kayıt edeceğiz.
Öncelikle bu Wordpress Multi Database PHP yazımdaki ilk işlemi yapmanız gerekiyor. db.php dosyasını hazırlayın ve temanızın funciton.php dosyası ile aynı klasörde olmasını sağlayın.
Bunu yaptıktan sonra temanızın function.php dosyasına gelin ve şu add_action.php metodunu ekleyin.
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) { },10 ,2);
Bu metot, sitenizdeki tüm elementor form’larına özellik olarak eklenecek. Tabi ki ön yüzde hiçbir şey görmeyeceksiniz ama form’un submit butonuna tıklandığında bu metot çalışacak. Sitenizdeki tüm elementor formları için geçerli. Her form için burası çalışacak. O yüzden her biri için ayarlama yaptığınızdan emin olun. Yada kısa yol, formlarınıza isim verin. Bu isimi metodumuzda kullanabiliriz.
Şimdi metodumuzu dolduralım.
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) { $dbhost = 'localhost'; $dbuser = 'DATABASE_KULLANICI_ADI'; $dbpass = 'DATABASE_SIFRE'; $dbname = 'DATABASE_ADI'; require_once('/home/hosting_kullanici_on_ekiniz/db.php'); $db_watch = new db_custom($dbhost, $dbuser, $dbpass, $dbname); /*db_custom, db.php dosyasındaki sınıfımız oluyor.*/ },10,2);
Şuan AYNI HOSTİNG üzerindeki farklı bir veri tabanına bağlandık. Bunu belirtmem gerekiyordu. Farklı hosting denemedim çünkü.
Şimdi $record parametresi ile işlerimizi çözelim. Kodlarımızın tamamı…
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) { $dbhost = 'localhost'; $dbuser = 'DATABASE_KULLANICI_ADI'; $dbpass = 'DATABASE_SIFRE'; $dbname = 'DATABASE_ADI'; require_once('/home/hosting_kullanici_on_ekiniz/db.php'); $db_watch = new db_custom($dbhost, $dbuser, $dbpass, $dbname); /*db_custom, db.php dosyasındaki sınıfımız oluyor.*/ $form_name = $record->get_form_settings('form_name'); if( $form_name == 'iletisim_formu' ) { $raw_fields = $record->get( 'fields' ); $fields = []; foreach ( $raw_fields as $id => $field ) { $fields[ $id ] = $field['value']; } $output['success'] = $db_watch->query( " INSERT INTO iletisim_form_data (Name, Email, Message) VALUES ( '". $fields['ad']."' , '". $fields['email']."' , '". $fields['mesaj']."' )" ); $ajax_handler->add_response_data( true, $output ); } },10,2);
Kodlarda gördüğünüz gibi, form adını da aldık ve bir if ile sadece bir formun kaydedilmesini sağladık. Tabi burada farklı formlarını farklı tablolara farklı if’ler ile kayıt edebilirsiniz.
- form_name elementor tarafında yapılıyor.
- fields ‘lar forma eklenen alanlardır.
- fields ‘ların adları advanced sekmesinde ID (field name) alanına yazılır. Buraları mutlaka güncelleyin aksi takdirde fileld-654321 gibi bir ismi oluyor.
Yukarıdaki ayarları yaptığınızda emin olun. Yoksa kod kısmında özellikle fields’lar çok fazla karışıklık yaratıyor. Üstelik 3, 4 farklı formunuz varsa çok daha fazla karışıyor.
Elementor Form Verilerini Farklı Veritabanına Kaydetmek yazımda bu kadarı arkadaşlar. Sizde artık elementor fromlarının verilerini nereye aktaracağınız hakkında kara kara düşünmeye son vermiş olursunuz. Diğer yazılımızda görüşmek üzere….
PHP Dersleri için başlattığım repoya bağlantıya tıklayarak ulaşabilirsiniz. Tüm PHP yazılarım için tıklayabilirsiniz. Ayrıca Wordpress ve Elementor hakkındaki yazılarım içinde bağlantıya tıklayabilirsiniz.
Discord sunucuma katılmayı unutmayın. :D
Kodla kalın. :)