Problème ajout script ajax via wp_enqueue_scripts()

  • Avatar de Inconnu

    Bonjour,

    Je développe actuellement un plugin wordpress et souhaiterais faire un traitement ajax pour traiter une requête POST.

    En suivant la documentation officielle, la méthode pour ajouter un script ajax est d’utiliser les fonctions natives de wordpress en le mettant en file d’attente puis ensuite permettre au fichier ‘admin/admin-ajax.php’ de localiser notre script : :

    add_action( 'admin_enqueue_scripts', 'my_enqueue' );
     
    /**
     * Enqueue my scripts and assets.
     *
     * @param $hook
     */
    function my_enqueue( $hook ) {
        if ( 'myplugin_settings.php' !== $hook ) {
            return;
        }
        wp_enqueue_script(
            'ajax-script',
            plugins_url( '/js/myjquery.js', __FILE__ ),
            array( 'jquery' ),
            '1.0.0',
            true
        );
     
        wp_localize_script(
            'ajax-script',
            'my_ajax_obj',
            array(
                'ajax_url' => admin_url( 'admin-ajax.php' ),
                'nonce'    => wp_create_nonce( 'title_example' ),
            )
        );
    }

    Ensuite il faut créer le handler ajax qui va être accroché à un hook pour permettre au javascript de repérer la fonction à utiliser :

    add_action( 'wp_ajax_my_tag_count', 'my_ajax_handler' );
     
    /**
     * Handles my AJAX request.
     */
    function my_ajax_handler() {
        // Handle the ajax request here
     
        wp_die(); // All ajax handlers die when finished
    }

    J’ai donc une classe ShortcodeController dans laquelle j’ai créé 1 fonction pour mettre le script js en dans la file d’attente :

        public function enqueue_brochure_ajax_script() {
    
            wp_enqueue_script(
                'brochure-ajax-script',
                plugins_url('/personal-shortcodes/ajax/ajax-brochure-shortcode.js'),
                array('jquery'),
                '1.0.0',
                true
            );
    
            wp_localize_script(
                'brochure-ajax-script',
                'brochure_ajax_obj',
                array(
                    'array_url' => admin_url('admin-ajax.php'),
                    'nonce'     => wp_create_nonce('brochure_shortcode_verification')
                )
            );
        }

    puis une 2ème fonction réservée au handler ajax :

    `public function brochure_ajax_handler() {
    check_ajax_referer(‘brochure_shortcode_verification’);

    /* Mon traitement */

    wp_die(); // All ajax handlers should die when finished
    }`

    Ainsi j’ajoute le script et le handler aux hooks correspondants dans le constructeur de la classe :

        public function __construct() {
    
            $this->firstname = "";
            $this->name = "";
            $this->emailBrochure = "";
            $this->callback_url_brochure = site_url('/wp-content/uploads/' . '2022/02/presentation-clinic-renaissance.pdf', 'https');
            $this->callback_url_newsletter = site_url();
    
            add_action('wp_enqueue_scripts', 'enqueue_brochure_ajax_script');
            add_action('wp_enqueue_scripts', 'enqueue_newsletter_ajax_script');
            add_action('wp_ajax_nopriv_brochure_shortcode', 'brochure_ajax_handler');
            add_action('wp_ajax_nopriv_newsletter_shortcode', 'newsletter_ajax_handler');
    
            add_shortcode('formulaireBrochure', array($this, 'formulaireBrochure'));
            add_shortcode('newsletter', array($this, 'newsletter'));
        }

    J’appelle ensuite la classe dans le fichier ‘personal-shortcodes.php’ de point d’entrée du plugin :

    function run_personal_shortcodes() {
        $plugin = new PersonalShortcodes();
        $shortcode = new ShortcodeController();
        $plugin->run();
    }
    run_personal_shortcodes();

    Mon arborescence se présente comme ceci :

    /personal-shortcodes/ajax/ajax-brochure-shortcode.js
    /personal-shortcodes/controllers/ShortcodeController.js
    /personal-shortcodes/personal-shortcodes.php

    Malgré ça, mon script js n’est pas reconnu et est ajouté comme balise <text></text> au lieu de <script></script>. Ainsi, le javascript n’est pas interprété et est juste affiché en haut de chacune de mes pages, que ce soit du backoffice ou du frontoffice.

    Quelqu’un aurait une idée s’il-vous-plaît ?

    Merci d’avance

    J’aurais bien aimé vous montrer mes screens mais je n’arrive pas à insérer d’images dans le post.

  • Avatar de Inconnu

    Petite erreur dans le message précédent, c’est bien :

    wp_localize_script(
                'brochure-ajax-script',
                'brochure_ajax_obj',
                array(
                    'ajax_url' => admin_url('admin-ajax.php'),
                    'nonce'     => wp_create_nonce('brochure_shortcode_verification')
                )
            );

    et non :

    wp_localize_script(
                'brochure-ajax-script',
                'brochure_ajax_obj',
                array(
                    'array_url' => admin_url('admin-ajax.php'),
                    'nonce'     => wp_create_nonce('brochure_shortcode_verification')
                )
            );
  • Avatar de Inconnu

    Bonjour,

    Ce forum est dédié aux utilisateurs de WordPress.com, et pour votre demande je vous invite à vous tourner vers le forum d’entraide francophone de WordPress.org car ils seront plus à même de vous conseiller :

    https://wpfr.net/support/

    Pour en apprendre plus sur la différence entre WordPress.com et le CMS WordPress disponible sur WordPress.org, merci de vous référer à ce guide :

    https://wordpress.com/fr/support/com-vs-org/

  • Le sujet ‘Problème ajout script ajax via wp_enqueue_scripts()’ est fermé aux nouvelles réponses.