Ecommerce Shopify WordPress Discussion

AJAX Operations Not Working Inside a WordPress Plugin

I'm developing a WordPress plugin and encountering issues with implementing AJAX operations within it. Specifically, the AJAX URL provided by wp_localize_script to my JavaScript file seems to be unrecognized, leading to AJAX operations only working when I include the code in the theme's functions.php file, but not within my plugin files. My plugin aims to manage permission types, allowing operations like listing, updating statuses, and deleting permission types through AJAX in the admin panel. Plugin Structure: wp-content/plugins/izin-yonetimi/izin/izin_functions.php: Contains AJAX operations and the usage of wp_enqueue_script and wp_localize_script. wp-content/plugins/izin-yonetimi/js/izin-turleri.js: The JavaScript file executing AJAX requests. wp-content/plugins/izin-yonetimi/izin/izin_turleri_listesi.php: PHP page I will add to the menu Example of izin_functions.php: function izin_yonetimi_scripts() { // Admin paneli için script ve localize script ekleyin if (is_admin()) { // JavaScript dosyasını kuyruğa ekleyin wp_enqueue_script('izin-yonetimi-script', plugin_dir_url(__DIR__) . 'js/izin-turleri.js', array('jquery'), '3.7.1', true); // AJAX URL'ini ve herhangi bir diğer PHP verisini JavaScript'e aktarın wp_localize_script('izin-yonetimi-script', 'izinYonetimiAjax', array( 'ajaxurl' => admin_url('admin-ajax.php') )); } } add_action('admin_enqueue_scripts', 'izin_yonetimi_scripts'); // İzin türlerini listeleme için AJAX işleyicisi add_action('wp_ajax_get_izin_turleri_listesi', 'get_izin_turleri_listesi_handler'); function get_izin_turleri_listesi_handler() { global $wpdb; $table_name = $wpdb->prefix . 'izin_turleri'; $izin_turleri = $wpdb->get_results("SELECT * FROM {$table_name} WHERE izin_durumu = '1'", OBJECT); wp_send_json_success($izin_turleri); } // İzin türü durumunu güncelleme için AJAX işleyicisi add_action('wp_ajax_update_izin_turu_durumu', 'update_izin_turu_durumu_handler'); function update_izin_turu_durumu_handler() { // Güvenlik kontrolü, nonce kontrolü vb. eklenebilir global $wpdb; $table_name = $wpdb->prefix . 'izin_turleri'; $id = isset($_POST['id']) ? intval($_POST['id']) : 0; $izin_durumu = isset($_POST['izin_durumu']) ? sanitize_text_field($_POST['izin_durumu']) : '0'; $success = $wpdb->update($table_name, ['izin_durumu' => $izin_durumu], ['id' => $id]); if ($success !== false) { wp_send_json_success(['message' => 'İzin türü durumu başarıyla güncellendi.']); } else { wp_send_json_error(['message' => 'İzin türü durumu güncellenirken bir hata oluştu.']); } } // İzin türünü silme için AJAX işleyicisi add_action('wp_ajax_delete_izin_turu', 'delete_izin_turu_handler'); function delete_izin_turu_handler() { // Güvenlik kontrolü, nonce kontrolü vb. eklenebilir global $wpdb; $table_name = $wpdb->prefix . 'izin_turleri'; $id = isset($_POST['id']) ? intval($_POST['id']) : 0; $success = $wpdb->delete($table_name, ['id' => $id]); if ($success) { wp_send_json_success(['message' => 'İzin türü başarıyla silindi.']); } else { wp_send_json_error(['message' => 'İzin türü silinirken bir hata oluştu.']); } } JavaScript (izin-turleri.js) Example: jQuery(document).ready(function($) { // İzin türleri listesini yükler function izinTurleriListesiniYukle() { $.ajax({ url: izinYonetimiAjax.ajaxurl, type: 'POST', data: { action: 'get_izin_turleri_listesi', }, success: function(response) { if(response.success) { var listesi = '<table class="table"><thead><tr><th>ID</th><th>İzin Türü Adı</th><th>Durumu</th><th>İşlemler</th></tr></thead><tbody>'; $.each(response.data, function(i, izinTuru) { listesi += '<tr>' + '<td>' + izinTuru.id + '</td>' + '<td>' + izinTuru.izin_turu_adi + '</td>' + '<td>' + (izinTuru.izin_durumu === '1' ? 'Aktif' : 'Pasif') + '</td>' + '<td><button onclick="izinTuruDurumunuGuncelle(' + izinTuru.id + ', \'' + (izinTuru.izin_durumu === '1' ? '0' : '1') + '\')">Durumu Değiştir</button> ' + '<button onclick="izinTuruSil(' + izinTuru.id + ')">Sil</button></td>' + '</tr>'; }); listesi += '</tbody></table>'; $('#izinTurleriListesi').html(listesi); } else { $('#izinTurleriListesi').html('<p>Liste yüklenirken bir hata oluştu.</p>'); } } }); } // İzin türü durumunu günceller window.izinTuruDurumunuGuncelle = function(id, yeniDurum) { if(confirm('Bu izin türünü silmek istediğinize emin misiniz?')) { $.ajax({ url: izinYonetimiAjax.ajaxurl, type: 'POST', data: { action: 'update_izin_turu_durumu', id: id, izin_durumu: yeniDurum }, success: function(response) { if(response.success) { alert(response.data.message); izinTurleriListesiniYukle(); } else { alert('İşlem sırasında bir hata oluştu.'); } } }); } } // İzin türünü siler window.izinTuruSil = function(id) { if(confirm('Bu izin türünü silmek istediğinize emin misiniz?')) { $.ajax({ url: izinYonetimiAjax.ajaxurl, type: 'POST', data: { action: 'delete_izin_turu', id: id }, success: function(response) { if(response.success) { alert(response.data.message); izinTurleriListesiniYukle(); } else { alert('Silme işlemi sırasında bir hata oluştu.'); } } }); } } // Sayfa yüklenince izin türleri listesini yükler izinTurleriListesiniYukle(); }); Page File <?php require_once('../wp-load.php'); // Kullanıcı girişi kontrolü ve yetki kontrolü if (!is_user_logged_in() || !current_user_can('manage_options')) { wp_redirect(wp_login_url()); exit; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>İzin Türleri Listesi</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container mt-5"> <h2>İzin Türleri Listesi</h2> <div id="izinTurleriListesi"></div> </div> <!-- jQuery Library --> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <!-- Eklenti JavaScript Dosyası --> <script src="<?php echo plugin_dir_url(__DIR__) . 'js/izin-turleri.js'; ?>"></script> </body> </html> Issue: I receive an Uncaught ReferenceError: izinYonetimiAjax is not defined error when attempting to execute AJAX operations from within my plugin files. This issue does not occur when I place the same code in the theme's functions.php file. Attempts to Resolve: Verified the correct order and hook usage of wp_enqueue_script and wp_localize_script. Confirmed the path and name of the JavaScript file are correct. Used the admin_enqueue_scripts hook for the admin panel. How can I resolve this issue to ensure AJAX operations work within my plugin? Thank you for your assistance.
TurboCommerce make the better internet purchasing globaly

Turbo Multi-language Translator

Make the better internet purchasing globaly

Turbosify SEO Speed Booster

5.0 (7) Free plan available
Get better conversions by improving store loading speed Installed

Turbo Multi-language Chat - AI Customer service in one hand

TurboCommerce make the better internet purchasing globaly
Our products

The help you need, when you need it

App by Turbo Engine

3 apps • 5.0 average rating

Turbosify Speed Booster

5.0 (7)
Get better conversions by optimizing shopify store Google page speed Installed

Turbosify Translator for Wordpress Woocommerce

5.0 (74) Free Wordpress Woocommerce Plugin
Translate your wordpress website to multiple language within 1 click, no configuration needed, no No technical required

Grow your business here

Whether you want to sell products down the street or around the world, we have all the tools you need.