私は私のajaxリクエストを動かすのに苦労しています。 $ajax
を起動すると失敗し、このエラーが表示されます。
参照されていないReferenceError:feature_ajaxが定義されていない
これは私のfunctions.php
です
// load our frontend modifiers
require_once(__DIR__ . '/lib/Frontend.lib.php');
これは私の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();
以下の$ajax
スクリプトを起動すると、エラー feature_ajaxが定義されていません が発生します。
しかし、それは上記のコードで定義されています。
以下のこのスクリプトは私の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);
}
});
私が悪いことをしていることを理解するのを手伝っていただければ幸いです。
ありがとう
修正された固定コード
だから私はこの仕事をするために変更しました。私はすでにmain-min.js
ファイルをエンキューしていたので、エンキューされたjavascriptと同じハンドルを使ってwp_localize_script
を結合しましたが、うまくいきました。
// 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')
wp_localize_script
を介してwindow
オブジェクトに変数を正しく追加するには、次の順序で3つの関数を正しく呼び出す必要があります。
あなたの場合はwp_register_script
がありません。誰かが同じ問題を経験した場合、以下のコード手順に従ってください。
_ 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');
その後、 Javascript にあるローカライズされたオブジェクトにアクセスできます。
var ajax_url = object_name.ajax_url;
console.log(ajax_url);
アプリケーションにとって意味のある _ php _ の$handle
と同様に、object_name
変数の内容を変更します。