Dynamic Data Transfer in WordPress with AJAX and PHP

Two tin cans connected by a string, a cobalt-blue sphere on one of themAI-generated
Contents

Introduction

AJAX (Asynchronous JavaScript and XML) is a technique that makes it possible to transfer data between a browser and the server without reloading the page. In WordPress, AJAX is especially useful for interactive elements such as forms, search functions or dynamic content elements. In this article we show how to use jQuery AJAX and PHP to implement a form in WordPress that processes data without a page reload.

1. Why use AJAX in WordPress?

  • Improved user experience: No waiting times caused by page reloads.
  • Efficiency: Saves server resources, since only the relevant content is loaded.
  • Flexibility: AJAX can be used for many functions, e.g. live search, forms or dynamic content updates.

2. Basic WordPress setup for AJAX

2.1. Including JavaScript

WordPress uses jQuery by default. To enable AJAX requests, we first need to add our own script to our theme or plugin.

Add the following lines to the functions.php of your WordPress theme:

function my_ajax_enqueue_scripts() {
    wp_enqueue_script('ajax-script', get_template_directory_uri() . '/js/ajax-script.js', array('jquery'), null, true);
    wp_localize_script('ajax-script', 'ajax_object', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts', 'my_ajax_enqueue_scripts');
  • wp_enqueue_script() loads our custom JavaScript ajax-script.js.
  • wp_localize_script() defines a global JavaScript variable ajax_object.ajaxurl that provides the URL for AJAX requests.

Now create the file js/ajax-script.js and add the following jQuery script:

jQuery(document).ready(function($) {
    $('#ajax-form').on('submit', function(e) {
        e.preventDefault();
        
        var formData = $(this).serialize();
        
        $.ajax({
            type: 'POST',
            url: ajax_object.ajaxurl,
            data: formData + '&action=submit_ajax_form',
            success: function(response) {
                $('#form-response').html(response);
            }
        });
    });
});

This script sends the form data to WordPress via AJAX and outputs the server response in #form-response.

3. WordPress AJAX handler in PHP

3.1. Registering the AJAX action in WordPress

In functions.php we register an AJAX action for logged-in and logged-out users:

function handle_ajax_form_submission() {
    if (isset($_POST['username']) && !empty($_POST['username'])) {
        $username = sanitize_text_field($_POST['username']);
        echo "Hallo, " . esc_html($username) . "! Deine Anfrage wurde erfolgreich übermittelt.";
    } else {
        echo "Fehler: Bitte gib deinen Namen ein.";
    }
    wp_die();
}
add_action('wp_ajax_submit_ajax_form', 'handle_ajax_form_submission');
add_action('wp_ajax_nopriv_submit_ajax_form', 'handle_ajax_form_submission');
  • wp_ajax_ is used for logged-in users.
  • wp_ajax_nopriv_ also allows users who are not logged in to make the request.
  • sanitize_text_field() filters the input to minimize security risks.
  • wp_die() ends the AJAX request cleanly.

4. Creating the HTML form

Create a simple form in a shortcode or a WordPress page:

function ajax_form_shortcode() {
    ob_start();
    ?>
    <form id="ajax-form" method="post">
        <label for="username">Name:</label>
        <input type="text" name="username" id="username" required>
        <button type="submit">Absenden</button>
    </form>
    <div id="form-response"></div>
    <?php
    return ob_get_clean();
}
add_shortcode('ajax_form', 'ajax_form_shortcode');

Now insert [ajax_form] into a WordPress page or post to display the form.

5. Security and optimization

5.1. Security measures

  1. Nonce value for validation wp_nonce_field('ajax_form_action', 'ajax_form_nonce'); In the JavaScript file, the nonce value should be sent along and verified on the server side.
  2. Validate and escape data
    • Use sanitize_text_field() to remove unwanted characters from input.
    • Output data with esc_html() to prevent potential XSS attacks.

5.2. Improving error handling

Update the AJAX script to output error messages:

$.ajax({
    type: 'POST',
    url: ajax_object.ajaxurl,
    data: formData + '&action=submit_ajax_form',
    success: function(response) {
        $('#form-response').html('<p class="success">' + response + '</p>');
    },
    error: function() {
        $('#form-response').html('<p class="error">Es gab ein Problem mit der Anfrage.</p>');
    }
});

Conclusion

With jQuery AJAX and PHP you can make WordPress forms interactive without requiring a full page reload. The method shown here is suitable for many use cases such as contact forms, dynamic search or user registration.

Summary of the most important steps:

  1. Include JavaScript for AJAX (ajax-script.js).
  2. Register the WordPress AJAX handler in functions.php.
  3. Create an HTML form with a shortcode.
  4. Implement security measures (validate data, use a nonce).

With these techniques you can implement dynamic content and interactive forms in WordPress efficiently. Good luck with the implementation!

Questions or need support? Contact us!

Michael Rademacher

Founder of realmaker

Michael Rademacher founded realmaker in 2003. He develops WordPress websites and software, produces films and live streams, and writes here about what he learns in client projects.

About Michael

Rather have it maintained?

Updates, backups and monitoring are handled by wp-einfach.de – for a fixed monthly price (service in German).

Go to wp-einfach.de