-1

私はこのワードプレスプラグインを作成していますが、これはうまく機能しますが、ajax を使用した送信データの問題です。すでに ajax コードを作成しましたが、機能しません。

それを理解するのを手伝ってください

ありがとうございました

ここにコードがあります

    <script>
var data = {
    action: 'join_mailinglist',
    email: email
};

jQuery("#mailinglistsubmit").hide();
jQuery(".ajaxsave").show();
jQuery.post("<?php echo admin_url('admin-ajax.php'); ?>", data,
function(response){
    jQuery(".ajaxsave").hide();
    jQuery("#mailinglistsubmit").show();
});     

return false;

</script>

<?php
/*
Plugin Name: MyFirst
Plugin URI: http://zachis.it
Description: ajax form.
Version: 1.0
Author: Zachary Smith
Author URI: http://zachis.it
License: GPL2
*/
?>


<?php
 /* What to do when the plugin is activated? */
register_activation_hook(__FILE__,'my_first_plugin_install');

/* What to do when the plugin is deactivated? */
register_deactivation_hook( __FILE__, 'my_first_plugin_remove' );

function my_first_plugin_install() {
/* Create a new database field */
add_option("my_first_data", 'Testing !! My Plugin is Working Fine.', 'This is my first plugin panel data.', 'yes');
}

function my_first_plugin_remove() {
/* Delete the database field */
delete_option('my_first_data');

} 


add_action('admin_menu', 'my_first_admin_menu');
function my_first_admin_menu() {
add_options_page('Plugin Admin Options', 'My Plugin Settings', 'manage_options',
'my-first', 'plugin_admin_options_page');
}
?>

<?php
function plugin_admin_options_page() {
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2>Plugin Options Admin Page</h2>
</div>
<div class="content">

<div class="output"><p><?php echo get_option('my_first_data'); ?></p></div>
<p>
<form method="post" action="options.php">
<?php wp_nonce_field('update-options'); ?>
<h2>Enter Text: </h2>
<textarea name="my_first_data" id="my_first_data" cols="200" rows="20"></textarea>
<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="my_first_data" /><br />
<input style="position: fixed; left: 40%;" id="mailinglistsubmit" type="submit" value="Save Changes" /><img src="<?php admin_url(); ?>/wp-admin/images/wpspin_light.gif" alt="" class="ajaxsave" style="display: none;" />
</form>
</p>
</div>
<?php
}
?> 
<?php add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 
?>

<?php function join_mailinglist_callback() {
    $email = $_POST['email'];
    if(!empty($email)) {
        $yourEmail = 'c@bavotasan.com';
        $subject = 'Add me to your mailing list';
        $success = mail($yourEmail, $subject, $email);
        if(!empty($success)) {
            echo 'Your email is subscribed to our mailing list.';
        } else {
            echo 'There was a problem. Please try again.';
        }
    }
    die();
} ?>


<style>
.content { padding-left:150px;}
.output p {width:700px; height:auto;}
</style>
4

1 に答える 1

1

あなたのこのプラグインにはいくつか問題があります。

まず、JavaScript コードがプラグインの先頭に追加されているのはなぜですか? WordPress に JS を含める正しい方法は、JS を別の .js ファイルに入れ、.js を使用してエンキューしてロードすることwp_enqueue_script()です。下部のスタイルも同じです。

例は次のとおりです。

function my_scripts_method() {
    wp_enqueue_script(
        'your-script-name',
        plugins_url( 'js/your-script.js' , __FILE__ ),
        array('jquery')
    );
}
add_action('wp_enqueue_scripts', 'my_scripts_method');

第二に、PHP プラグイン ファイルはコンテンツを出力してはなりません。つまり、ヘッダーの後にタグを表示しないでください?>改行がいくつか出力されるためです。

次に、静的 JS ファイルで admin-ajax-url を取得するには、次の関数を使用する必要があります。

wp_localize_script( 'ajax_get_permalink', 'ajax_get_permalink', array(
    ajax_url =>  admin_url( 'admin-ajax.php' )  
));

JS ファイルでは、フォームの送信時に呼び出される関数でメイン コードをラップする必要があります。

function mailingListSubmit() {
    var data = {
        action: 'join_mailinglist',
        email: jQuery('#mailingListEmail')
    };

    jQuery("#mailinglistsubmit").hide();
    jQuery(".ajaxsave").show();
    jQuery.post(ajax_get_permalink.ajax_url, data,
    function(response){
        jQuery(".ajaxsave").hide();
        jQuery("#mailinglistsubmit").show();
    });
}

最後に、アクション フックも間違っています。あなたはそれをコーデックスからコピーしました(またはどこにあるかは誰にもわかりません)が、わざわざドキュメントを読むことさえしませんでした。

add_action('wp_ajax_my_action', 'my_action_callback');

関数名をmy_action_callback反映し、JS ファイルで定義したアクションに変更する必要があります。join_mailinglist_callbackwp_ajax_my_actionwp_ajax_join_mailinglist

上記のコードは構文エラーについてテストされていませんが、正しい方向を示しているはずです。これらのコードをコピーして貼り付けたとしても、プラグインが魔法のように機能するとは思わないでください。

WordPress プラグインの AJAX について詳しくは、http: //codex.wordpress.org/AJAX_in_Pluginsをご覧ください。

于 2012-12-05T18:22:17.483 に答える