J'ai du mal à obtenir ma demande ajax de travailler. Il échoue lorsque je déclenche mon $ajax
et que je reçois cette erreur ...
Uncaught ReferenceError: feature_ajax n'est pas défini
C'est mon functions.php
// load our frontend modifiers
require_once(__DIR__ . '/lib/Frontend.lib.php');
Ceci est ma classe Frontend.lib.php
php ...
class Frontend
{
/** frontend constructor */
public function __construct()
{
// enqueue our scripts
add_action('wp_enqueue_scripts', array($this, 'action_wp_enqueue_scripts'));
// add out ajax actions
$this->ajax_actions();
}
/** frontend enqueued scripts */
public function action_wp_enqueue_scripts()
{
// localize admin ajax
wp_localize_script('ajax-actions', 'ajax_actions', array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
));
// enqueue scripts
wp_enqueue_script('ajax-actions');
}
/** ajax actions */
public function ajax_actions()
{
// admin field postdata ajax actions
add_action('wp_ajax_field_postdata', [__CLASS__, 'field_postdata']);
// public field postdata ajax actions
add_action('wp_ajax_nopriv_field_postdata', [__CLASS__, 'field_postdata']);
}
// Field Post Data
public static function field_postdata()
{
global $post;
$post_id = ($_REQUEST['id']);
if($post_id){
$post = get_post($post_id);
setup_postdata($post);
get_template_part('ajax/modal','field');
die();
}
}
}
new Frontend();
Lorsque je déclenche le script $ajax
ci-dessous, c'est lorsque j'obtiens l'erreur feature_ajax n'est pas défini .
Mais cela est défini dans le code ci-dessus.
Ce script ci-dessous est mon fichier theme-min.js
// load feature post data
$.ajax({
cache: false,
timeout: 8000,
url: ajax_actions.ajaxurl,
type: 'POST',
data: {
action: 'field_postdata',
id: post_id
},
success: function (data) {
alert(data);
}
});
Toute aide pour comprendre ce que je fais mal serait géniale.
Merci
Code fixe mis à jour
Donc, ce que j'ai changé pour que cela fonctionne. J'avais déjà mis mon fichier main-min.js
en file d'attente; j'ai donc combiné mon wp_localize_script
en utilisant le même descripteur que mon javascript en file d'attente et tout a fonctionné.
// register js in footer
$filename = get_template_directory_uri() . '/assets/scripts/main-min.js';
wp_register_script('main-js', $filename, array(), Rand(), true);
// localize theme-js ajax actions
wp_localize_script('main-js', 'ajax_actions', array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
));
// enqueue required scripts
wp_enqueue_script('main-js')
Pour réussir à ajouter une variable à l'objet window
via wp_localize_script
, vous devez appeler correctement trois fonctions dans l'ordre suivant:
Dans votre cas, il vous manque le wp_register_script
. Si quelqu'un rencontre le même problème, suivez les procédures du code ci-dessous.
PHP
<?php
function my_theme_wp_enqueue_scripts() {
$handle = 'my_handle';
// Register the script
wp_register_script($handle, '/path/to/my_script.js');
// Localize the script with a new data
wp_localize_script($handle, 'object_name', [
'ajax_url' => admin_url('admin-ajax.php')
]);
// Enqueue the script
wp_enqueeu_script($handle);
}
add_action('wp_enqueue_scripts', 'my_theme_wp_enqueue_scripts');
Ensuite, vous pouvez accéder à l'objet localisé dans Javascript
var ajax_url = object_name.ajax_url;
console.log(ajax_url);
Modifiez le contenu de la variable $handle
ainsi que le object_name
dansPHPqui a du sens pour votre application.