私は Stackexchange の Wordpress 側でこれを尋ねましたが、私をどこかに導く答えがなくなったので、ここの誰かが助けてくれることを望んでいました. このクロスポストがルールに違反している場合は申し訳ありません. 元はここにありました。https://wordpress.stackexchange.com/questions/95075/jquery-ajax-call-not-executing-in-plugin
「寄付」フォームを出力する無料プラグインのクラスに取り組んでいます。「いいえ」の却下リンクはフォームを非表示にし、AJAX 呼び出しを実行して WP オプションを更新し、却下を追跡します。
呼び出された PHP 関数を実際に起動するのに問題があります。AJAXによって呼び出されたPHP関数に追加したエコーを出力する「成功」関数を追加しました(通常、関数には出力がなく、WPオプションの更新のみです)が、「データ」は常に0であり、データベース。
このプラグインには他にもいくつかの AJAX 呼び出しがあり、すべて機能しますが、クラス内にあるのはこれだけです。クラスの開発の初期には機能していましたが、それを壊すために何ができたのかわかりません。私はそれをAJAX登録の宣言とテストメッセージを出力する関数だけに落とし込もうとしましたが、成功しませんでした。
何らかの理由でWPが実際に機能を使用できないと推測しています。
これが私のjQuery AJAX呼び出しの関連部分です
// Create the AJAX data
ajax_call_data = {
'action': 'dismiss_ppd_dmgr',
'nonce': $nonce
};
// Call the AJAX function to update the options
jQuery.ajax({
url: ajaxurl,
type: 'post',
data: ajax_call_data,
success: function(data) { alert( data ) }
});
クラスには、クラスのインスタンス化で設定される属性 ajax_call があり、Wordpress への呼び出しをそのように追加しています。$this->ajax_call が適切に設定されていることを確認し、変数を使用する代わりにハードコーディングも試みました。
add_action( 'wp_ajax_' . $this->ajax_call , array( &$this , 'dismiss_form' ) );
$this->ajax_call は「dismiss_ppd_dmgr」を出力します。wp_filter をエコーしたところ、wp_ajax_dismiss_ppd_dmgr が登録されていて、クラスで Dismiss_form() を指していることがわかりました。ただし、結果は常に 0 であり、データベースでは何も更新されません。
私が試したこと:
- & ありとなし
- $this->ajax_call の代わりにハードコーディング
- add_action をコンストラクターで直接呼び出すだけでなく、admin_init アクションによって呼び出される関数内に配置する
クラス外でAJAX add_actionを作成する
add_action( 'wp_ajax_dismiss_ppd_dmgr' , array( $ppd_dmgr , 'dismiss_form' ) );
WP が私の AJAX 呼び出しを好まない理由について、誰か考えはありますか?