web-dev-qa-db-fra.com

Comment ajouter un sous-menu avec AJAX?

Ce que je veux faire, c'est lancer la fonction add_submenu_page() depuis ajax sur la page des options de plug-in.

Lorsque je clique sur un lien "Ajouter une ligue", je souhaite afficher une entrée ajax [texte] qui sera enregistrée dans la base de données, puis ajouter la page du sous-menu en utilisant les valeurs qui ont été insérées.

J'espère également pouvoir supprimer l'entrée ainsi que la page nouvellement créée.

3
Rory Rothon

Comme vous ne pouvez pas obtenir un exemple complet sans code donné, je vais vous montrer une configuration approximative wordpress AJAX:

Mettez tout cela dans functions.php:

<?php
add_action('wp_head', 'my_action_javascript');
function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
    jQuery.ajax(
        type: 'POST',
        url: <?php echo admin_url('admin-ajax.php'); ?>,
        data: {
            action : 'your_AJAX_call',
            league : $('input#league').val() // get the user input
        },
        success: function( response, textStatus, XMLHttpRequest ) {
            $('ul#menu').append(response);
        }
        error: function( XMLHttpRequest, textStatus, errorThrown ) {
            alert('An error occured');
        }
    );
});
</script>
<?php
}

add_action( 'wp_ajax_nopriv_your_AJAX_call', 'your_AJAX_call' );
add_action( 'wp_ajax_your_AJAX_call', 'your_AJAX_call' );
function your_AJAX_call() {
    $league = $_POST['league'];
    // do sanitization
    // if sanitization is ok:
        // save to DB
        // echo sth like '<li><a href="new-league">New League</a></li>'
    exit;  // won't work without!
}

Je recommande de renvoyer un tableau encodé en json, afin de pouvoir fournir des informations plus détaillées. C'est à dire. si la désinfection échoue car trop courte:

// Your sanitization logic here
$arr = array ('success'=>false,'error'=>'Length must be at least 3 Characters');
echo json_encode($arr);

http://php.net/manual/de/function.json-encode.php

Ensuite, dans votre fonction response de l'appel ajax:

var response = jQuery.parseJSON(response);
alert('An error occured: ' + response.error);

http://api.jquery.com/jQuery.parseJSON/

Voici un bon article sur l'utilisation de ajax dans wordpress:

http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/

MODIFIER:

Totalement oublié à ce sujet:

add_submenu_page() ne fonctionnera pas, car la page est déjà rendue à ce stade.

1
xsonic