web-dev-qa-db-fra.com

Comment utiliser wp_localize_script dans une page WordPress autre que functions.php?

J'ai un formulaire de contact dans une page WordPress comme ceci:

$( '#contact_form' ).bootstrapValidator({
    fields: {
        // ...
    },
    submitHandler: function( formInstance ) {
        $.post( "../send-message", $("#contact_form").serialize(), function( result ) { 
            alert( pw_script_vars.State );            
        });
    }
}); 

Lorsque le formulaire est soumis à l'aide de la demande Ajax, il passe à une autre page WordPress intitulée /send-message qui contient le code PHP, puis doit renvoyer une valeur de succès ou d'échec à la demande Ajax pour signaler un succès ou une erreur. message d'échec. J'ai essayé d'utiliser la fonction wp_localize_script dans le fichier functions.php en utilisant une valeur fixe et cela a bien fonctionné:

function enqueue_scripts() {
    wp_enqueue_script( 'pw_script', get_stylesheet_directory_uri().'/inc/js/functions.min.js', array( 'jquery' ) );
    wp_localize_script( 'pw_script', 'pw_script_vars', array( 'State' => 'success' ) );
}
add_action( 'wp_enqueue_scripts', 'enqueue_scripts' );

Mais lorsque j'ai essayé d'utiliser le wp_localize_script dans la page WordPress /send-message, cela n'a pas fonctionné. Voici le contenu de la page '/ send-message':

<?php
    $sendSuccess = sendMessage();

    if( $sendSuccess )
        wp_localize_script( 'pw_script', 'pw_script_vars', array( 'State' => 'success' ) );
    else
        wp_localize_script( 'pw_script', 'pw_script_vars', array( 'State' => 'failure' ) );

    function sendMessage() {
        //This function will send the email then it will return true or false.
    }
?>

L'utilisation de wp_localize_script dans /send-message génère une variable non définie pw_script_vars dans le fichier JavaScript.

Comment utiliser wp_localize_script dans une page WordPress autre que functions.php?

3
Brad

Vous ne pouvez pas utiliser wp_localize_script dans un modèle de page. Vous devez l’utiliser dans functions.php ou dans votre plug-in personnalisé, après avoir enregistré votre script, qui se trouve généralement dans l’action wp_enqueue_scripts.

https://codex.wordpress.org/Function_Reference/wp_localize_script

2
user1049961

Vous n'avez pas besoin de déplacer votre wp_localize_script ailleurs. Votre problème réside dans le fait que vous essayez d'utiliser AJAX en dehors de WordPress. Permettez-moi de vous référer à une réponse précédente, montrant une version simple de l'utilisation de AJAX dans WordPress ici

0