私はデスクトップアプリを持っていて、プラグイン WP REST API を使って私のワードプレスサイトからデータを取得するために $ .getJSON を使います。これはうまく機能するので、functions.phpでAjaxで関数を呼び出すこともできると思いますか。どうやってこれをするの?私がこれまで見た例のどれもajaxURLを提供していません。これが何であるかをどうやって知ることができますか?
次のようなコードがあります。
Functions.php(サーバーのワードプレスサイト内)
//Called by Ajax from App - list the contents of the folder so they can be downloaded and stored locally
function folder_contents() {
$folderPath = $_POST['path'] ;
$files = array_diff(scandir($path), array('.', '..'));
print_r($files);
return $files;
die();
}
add_action('wp_ajax_my_action', 'folder_contents');
app.js(マシンからローカルにノードWebキットを使用して実行)
//ajax call
var data = {
action: 'path',
path: datafolder;
};
var ajaxurl = baseurl + ''; //WHAT IS THIS?!?!
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
console.log(response);
});
-------------------編集----------------------
以下の答えの後、私はアドバイスに基づいて以下のコードを試しましたが、私は得ます
"index.html:324未参照のReferenceError:ajax_paramsが定義されていません"
Functions.php
//add code to use ajax
function add_ajax_script() {
wp_localize_script( 'ajax-js', 'ajax_params', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
//Called by Ajax from App - list the contents of the folder so they can be downloaded and stored locally
function folder_contents() {
$folderPath = $_POST['path'] ;
$files = array_diff(scandir($path), array('.', '..'));
wp_send_json($files);
die();
}
add_action('wp_ajax_folder_contents', 'folder_contents');
add_action('wp_ajax_nopriv_folder_contents', 'folder_contents');
add_action( 'wp_enqueue_scripts', 'add_ajax_script' );
App.js
//ajax call
var data = {action: 'PowerPoint_folder_contents',path: datafolder};
var ajaxurl = ajax_params.ajax_url;
console.log(ajaxurl);
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
console.log(response);
});
add_ajax_script() 関数を削除して以下のように単純に使用すると0が返されます。
var ajaxurl = baseurl + 'wp-admin/admin-ajax.php';
助けてください...
//ajax call
var data = {
action: 'folder_contents',
path: datafolder;
};
var ajaxurl = baseurl + ''; //WHAT IS THIS?!?!
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
console.log(response);
});
そして、functions.phpの中のあなたのPHP
//Called by Ajax from App - list the contents of the folder so they can be downloaded and stored locally
function folder_contents() {
$folderPath = $_POST['path'] ;
$files = array_diff(scandir($path), array('.', '..'));
print_r($files);
return $files;
die();
}
add_action('wp_ajax_folder_contents', 'folder_contents');
add_action('wp_ajax_nopriv_folder_contents', 'folder_contents');
上記はajaxアクションとしてあなたの関数を追加します。その後、AJAXで関数名を呼び出します。
https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action) を参照してください。
それが役立つことを願っています。
あなたのコードでは 'ajax-js'スクリプトをローカライズしているように見えますが、スクリプト自体はエンキューされていますか?私は数週間前にwp_localizeスクリプトを使わなければなりませんでした、そして私はwp_localizeスクリプトと呼ばれる関数の中に私のJSスクリプトをエンキューしなければなりませんでした。例えば:
add_action( 'wp_enqueue_scripts', 'google_js_script' );
function google_js_script()
{
// Enqueue the js script
wp_enqueue_script('google-js', GOOGLE_PLG_URL . 'assets/js/google-places.js', array('jquery'), true);
// Localize the enqueued JS script
wp_localize_script( 'google-js', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'place' => '' ) );
}
これが問題のデバッグに役立つことを願っています。
WP Codex は、最初に宣言しなくてもグローバル変数ajaxurl
を使用できることを示しています。言い換えれば、この行をコメントアウトしてください。
var ajaxurl = ajax_params.ajax_url;
…そしてそれがうまくいくかどうか確かめなさい。