Wordpress使用AJAX提交表单

时间:2013-03-07 14:08:32

标签: php jquery ajax wordpress wordpress-plugin

我创建了一个Wordpress插件,允许我的客户端创建具有rsvp和支付事件费用的事件。我对于需要放置某些代码以及如何将表单提交到驻留在插件文件夹函数文件中的函数感到困惑。

此刻它会返回一个空白警报。

我在单个活动的页面上显示此表单:

<div id="rsvpContent">  
  <form id="Attendevent" action="">
   <input id="attend" name="attend" type="checkbox" value="yes" /><label for="attent">Yes, I plan to attend.</label>
 </form>

然后,我将它放入一般的header.php文件:

 $("#attend").click(function(){
    var form = $("#Attendevent").serialize();

    $.ajax({
      type:'POST',
      data:{"action":"Attending","data": form },
      url: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php",
      beforeSend: function(){
        alert(form);
      },
      success: function(data) {
            alert(data);
      }

    }); 

 });

然后,我将此功能放入插件文件夹中的主要功能页面:

function eventAttent() {
$wpdb->show_errors();
            if($_POST['attend'] == 'yes') {
                $wpdb->insert('wp_event_attendants',
                array( 'event_id' => get_the_ID(),'user_id' => $current_user->ID));
 echo $wpdb->print_error();
                }
            }


 add_action('wp_ajax_Attending', 'eventAttend');
 add_action('wp_ajax_nopriv_Attending', 'eventAttend');

当用户点击“Attending”复选框时,如何调用此函数?

2 个答案:

答案 0 :(得分:2)

尝试使用此代码。这是我测试过的代码。和我一起工作..但它不会处理FILE上传。

<强> HTML

<form id="form_name" name="form_name" >
<span id='errfrmMsg' style='margin:0 auto;'></span>
  //form attributes just as input boxe.
  <input type="hidden" name="action" value="anyName" />
  <input id="submit_button" onclick="submit_form();" type="button" value="Send" />
</form>

j查询

function submit_form()
{
  jQuery.post(the_ajax_anyName.ajaxurl_anyName,
   jQuery("#form_name").serialize(),
     function(response_from_the_action_function){
                jQuery("#errfrmMsg").html(response_from_the_action_function).css({"display":"block"});
      }
   );
}

在functions.php中的Php代码

wp_register_script("ajax-anyName", get_bloginfo('template_directory')."/js/custom_js.js", array( "jquery"));
wp_enqueue_script('ajax-anyName');
wp_localize_script("ajax-anyName","the_ajax_anyName", array("ajaxurl_anyName" => admin_url("admin-ajax.php")));
// add actions
add_action( "wp_ajax_anyName", "ajax_action_anyName" );
add_action( "wp_ajax_nopriv_anyName", "ajax_action_anyName" );

function ajax_action_anyName(){ 
  //Form processing code in PHP


}

答案 1 :(得分:2)

这个link是一个非常好的来源,可以帮助您调整主题。

将此代码放入子主题中的functions.php中。

// enqueue your custom js       
 function my_js_method() {
    // for jquery ui
       wp_enqueue_style( 'jqueryUI_style', get_stylesheet_directory_uri() . '/customCSS/jquery-ui.css' );
        wp_enqueue_script(
            'handleFormAjax-script',
            get_stylesheet_directory_uri() . '/handleFormAjax.js',
            array( 'jquery' )
        );
    // add the appropriate hook
    add_action( 'wp_enqueue_scripts', 'my_scripts_method' );


    // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
    wp_localize_script( 'handleFormAjax-script', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
    }


    // AJAX handler snippet
    function myHandlerMethod(){
      if (is_admin())
    echo "woow working like a charm";
    die();
    }
    //add the hooks for your handler function
    add_action('wp_ajax_myHandlerMethod', 'myHandlerMethod');
    // for users who are not logged in
    add_action('wp_ajax_nopriv_myHandlerMethod', 'myHandlerMethod');

除此之外,您的表单应如下所示。

<form id="assetForm" action= "/wp-admin/admin-ajax.php" method="post">
    <input type="hidden" name="action" value="myFunction"/>
    <button id="sbmBtn">SUBMIT </button>
</form>

最后,你的js函数应该解决你在functions.php

中定义的处理函数
var data = jQuery("#myForm :input").serializeArray();

    jQuery.post(jQuery("#myForm").attr("action"),data, function(info) {
        // success code ;
                });