web-dev-qa-db-ja.com

WordPress Ajaxの問題

更新

私は次のcurlコマンドを使って起動させることができました:curl -H "Accept: application/json" -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d "action=vixo_wordpress_signon&data=banjometer" --trace -

Jsonを受け付けるようにするにはどうすればよいかわかりませんが、ちょっと...

元の質問

私はWordPressの初心者で、Ajaxを機能させるのに問題があります - しかし、WordPressがどのようにPHPをロードするのかを理解するのに問題があります。

プラグインファイルがあります。

/usr/share/wordpress/wp-content/plugins/myplugin.php

以下のコードが含まれています。

// set up the ajax calls
add_action('wp_ajax_my_ajax', 'my_ajax');
add_action('wp_ajax_nopriv_my_ajax', 'my_ajax');  

function my_ajax () {
    debug_log ("My ajax fired...");
    echo "banjolalia...";
    die ();
}

私はajaxがCurlを使って起動したことを実証したい。

curl -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d '{"action":"my_ajax","data":"banjometer"}' --trace -

(ホームページはhttp://localhost/wordpressにあります)

Curlがbanjolaliaを返し、デバッグログに1行が表示されることを期待しています。

私が見ているのは0を返す関数です。

私はシングルサインオンコードを書いていて、WordPressに問い合わせてユーザーがログインしているかどうかを確認するために子サービスが必要なので、Ajaxはスタンドアロンです。

私はWordPress/PHPに慣れていないので、強力な開発サイクルはありません。

私が(リロードするために)コードを取得しようとしてきた方法は、Adminページのプラグインを非アクティブ化/アクティブ化することです。これはうまくいかないようです。私の変更がWordPressにロードされているかどうかわからなかったので、私は実際にラップをオフにしてから再びオンにした - それでもAjaxは起動しなかった。

2つのデバッグ用プラグインがインストールされています。

  • デバッグバー
  • デバッグコンソールバー

Devの観点から見た問題は次のとおりです。

  • どのように私はPHPコンソールを使ってどのコードがロードされているかをチェックしたりリロードを強制したりできますか?
  • どのアクションがどのフックに登録されているかを見るためにPHPコンソールを使用するにはどうすればいいですか?
1
Gordon Guthrie

あなたはWordpressで修正されたphpコードを「ロードする」ためにすることに特別な何もしません。すべてのファイルは実行時(つまりHTTPリクエストがサーバーによって処理されるとき)にそのままロードされます。プラグインがアクティブになっていることを確認するだけです。

あなたのcurlコマンドは不正です。代わりにこれを使ってください。

curl -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d action=my_ajax -d data=banjometer --trace -

しかし、CURLは本当に使うのが最も簡単なデバッグツールではありません。 Wordpress内でデバッグ用のPHPコードを実行するための高速で簡単な方法が必要な場合は、プラグインアクティベーションフックを使用します。

<?php

register_activation_hook(__FILE__, 'my_plugin_debug'); 
function my_plugin_debug() {

    $log = 'banjometer';

    die("OK, $log");
}

?>

このコードのみを含む新しいプラグインを作成してから、バックエンドでそれをアクティブにしてみてください。 (die文が原因で)エラーが発生しますので、プラグインは有効になりませんが、コードは実行され、エラーメッセージでログを確認できます。

2

私はCURLについては何も知りませんが、admin-ajax.phpを見ると、アクションが設定されていないために最初に、または一致するアクションが見つからなかったためにファイルの最後に0が表示されます。おそらくあなたはあなたのCURLコマンドを実行しすぎるのが早すぎるのでしょうか?つまり、Ajaxのコールバックが認識される機会がある前に?ローカルインストールの場合は、admin-ajax.phpのエラーコードを微調整して、少なくともどの時点で失敗しているかを知ることができます。ただそれを元に戻すことを忘れないでください、または後であなたの髪を引き抜きます。 (しました)

サイドバーで同様の質問に気付いたのですが、これが答えだと思います。 https://wordpress.stackexchange.com/a/70407/6477

編集コーデックスはプラグインファイルが before wp_ajax_フックの前に実行されていることを確認しますので、後でアクションを実行してみてください。

function wpa82473(){
  curl -X POST http://localhost/wordpress/wp-admin/admin-ajax.php -d '{"action":"my_ajax","data":"banjometer"}' --trace -
}
add_action('init', 'wpa82473');
1
helgatheviking