7

私はかなり長い間この問題に取り組んできました。テーマのオプション ページがあり、1 つのオプションが登録されています。

ユーザーが保存ボタンを押すたびに、ajax を介してオプションを更新しようとしています。これが私のコードです。

JS:

       function save_main_options_ajax() {

        $('.main-options-form').submit( function () { 

            var b       =  $(this).serialize(),
                optdata =  { action : "wp_ajax_main_options_save", data: b };

            $.post( ajaxurl, b, function (response) {
                if (response == 1 ) { alert('sucess'); }
                else { alert(optdata);}
            });
            return false;               
        });
    }
save_main_options_ajax();

php:

 function main_options_save_ajax() { 

        check_ajax_referer('_wpnonce', '_wpnonce' );

        $data = $_POST;
        unset($data['option_page'], $data['action'], $data['_wpnonce'], $data['_wp_http_referer']);


        if ( update_option('main_options', $data ) )
        { die(1); }
        else { die (0); }           
}
add_action('wp_ajax_main_options_save', 'main_options_save_ajax' );

firebug に表示される応答は 0 です。ここに何が欠けているのかわかりません。いくつかのバリエーションでこれを試しましたが、何も機能していないようです。

4

2 に答える 2

11

設定 API の使用時に ajax 経由で設定を保存する方法を見つけました。

コードで犯した主な間違いは、間違った URL パスを使用したことです。

ajaxurlwordpressでajax呼び出しを行うときに通常使用する標準を使用する代わりに。設定 API フォームのアクション コールを使用しますoptions.php

この URL パスを使用するため、options.php がこれらすべてを処理するため、php 関数でリクエストを処理する必要はありません。

したがって、私のインスタンスではこのように見える js 関数のみを処理する必要があります。

 function save_main_options_ajax() {
           $('.main-options-form').submit( function () {
                var b =  $(this).serialize();
                $.post( 'options.php', b ).error( 
                    function() {
                        alert('error');
                    }).success( function() {
                        alert('success');   
                    });
                    return false;    
                });
            }
 save_main_options_ajax();

それだけです。保存した後、成功のアラートが表示され、オプションが保存されました。

注:私が気づいた特異性は 1 つだけです。リクエストが終了しPOST、成功のアラートが表示された後、ページは、URL の末尾にGETパラメータが追加されたオプション ページのページ バージョンをリクエストします。&settings-updated=true

これが心配すべきことかどうかはわかりませんが、問題は発生していませんが、長期的には考慮すべきことかもしれません.

于 2012-08-10T20:17:25.053 に答える
2

アクションの値を から に変更してみてwp_ajax_main_options_saveくださいmain_options_save。Wordpress は、 のwp_ajax_ようにプレフィックスをアクション値に自動的に追加しますwp_ajax_{your_posted_action}

その他のベスト プラクティスについては、こちらの5 つの優れたヒントをお読みください。

于 2012-08-08T04:21:14.053 に答える