Je veux un script dans mon thème, ajax.php, que je veux charger ou accéder depuis d'autres pages à l'aide de ajax.
Dans ajax.php, je souhaite accéder aux fonctions de base WP telles que get_posts (), do_shortcode () etc. I.e. J'ai besoin de WordPress chargé sur le script.
Traditionnellement, j'ai configuré une page dans l'admin et lui ai attribué un modèle personnalisé. Par conséquent, je peux envoyer mes demandes ajax à l'adresse www.site.com/ajax et le modèle personnalisé gère la demande. Bien que cela fonctionne bien, je suis presque sûr que ce n'est pas le moyen le plus efficace ni le plus sûr de gérer ajax sur l'interface WP, mais je ne sais pas comment le faire correctement.
Merci.
Ce n’est vraiment pas la meilleure pratique de le faire de cette façon. En fait, vous n'avez pas besoin de créer un fichier ajax.php sauf si vous allez simplement l'inclure dans votre fichier functions.php. Vous devez lire AJAX dans WordPress. Vous n'aurez qu'à ajouter une action sur 'wp_ajax_name_of_action' et à spécifier simplement l'action dans la fonction javascript ajax.
Exemple simple tiré du codec WordPress:
<?php
add_action('admin_head', 'my_action_javascript');
function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: 'my_action',
whatever: 1234
};
// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
});
});
</script>
<?php
}
add_action('wp_ajax_my_action', 'my_action_callback');
function my_action_callback() {
global $wpdb; // this is how you get access to the database
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
die(); // this is required to return a proper result
}
Voir la page du codex pour savoir comment utiliser correctement AJAX dans les plugins . Les mêmes actions fonctionneront également dans le fichier functions.php.
Voir aussi cet article de blog lié à la page de codex ci-dessus pour plus d'échantillons de code.