web-dev-qa-db-ja.com

Functions.php内の関数のWordpress Ajax URL

私はデスクトップアプリを持っていて、プラグイン WP REST AP​​I を使って私のワードプレスサイトからデータを取得するために $ .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';

助けてください...

4
LeeTee
//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) を参照してください。

それが役立つことを願っています。

2
Steve North

あなたのコードでは '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' => '' ) );
}

これが問題のデバッグに役立つことを願っています。

1
SdeWijs

WP Codex は、最初に宣言しなくてもグローバル変数ajaxurlを使用できることを示しています。言い換えれば、この行をコメントアウトしてください。

var ajaxurl = ajax_params.ajax_url;

…そしてそれがうまくいくかどうか確かめなさい。

0
scott