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.
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.