为什么AJAX发布Wordpress不起作用


Why AJAX posting Wordpress not works?

我试图在前端通过ajax发布帖子,但总是失败。

我做错了什么?这是我的代码,它会返回0:

HTML

<form id="add" name="add" method="post" enctype="multipart/form-data">
    <label for="title">Title</label>
    <input id="title" type="text" name="post_title" value="">
    <input type="hidden" name="action" value="my_action">
    <input id="submit" value="Submit" type="submit">
</form>

PHP

wp_enqueue_script( 'my-ajax-request', '/js/my_js.js' );
wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'MyAjax.action' => 'my_action', 'MyAjax.post_title' => $_POST['post_title'] ) );
add_action('wp_ajax_nopriv_my_action', 'addpost_ajax_handler' );
add_action('wp_ajax_my_action', 'addpost_ajax_handler' );
function addpost_ajax_handler() {
echo 'reached ajax handler'; // delete this line later
if( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
    $title = $_POST['post_title'];
    $my_post = array(
        'post_title' => $title
    );
    $result = wp_insert_post( $my_post );
    if ( ! is_wp_error( $result ) ) echo 'success';
}
die();
}

my_js.js

$('#submit').on('click', function(e) {
e.preventDefault();
var data = { 'action': MyAjax.action, 'post_title': MyAjax.post_title };
    $.post(MyAjax.ajaxurl, data, function(response) {
        alert(response);
    });
});

要检查是否真的从php中的函数接收到数据,请添加一些内容:

function addpost_ajax_handler() {
    echo 'reached ajax handler'; // delete this line later
    if( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
        $title = $_POST['post_title'];
        $my_post = array(
            'post_title' => $title
        );
        $result = wp_insert_post( $my_post );
        if ( ! is_wp_error( $result ) ) echo 'success';
    }
    die();
}

如果你仍然只得到0,试着确保你以一种可以理解的方式发送动作参数:

data: { action: my_action, datastr: dataString },

另一个可能的麻烦可能是相对url,你应该使用完整的url路径来确保你的脚本运行,无论你在哪个页面上http://codex.wordpress.org/AJAX_in_Plugins并查看他们如何使用wp_localize_script发送正确的管理url。

您可以先尝试对插入后的代码进行一段时间的注释,然后只需回显"已到达的ajax处理程序",首先验证ajax请求是否成功,然后您可以逐步添加插入后代码。

除此之外,您还可以添加"其他"部分,例如。else{echo"failed";}只是为了验证在创建新帖子时是否存在问题,并返回"failed"作为响应。

感谢大家,问题解决了。我需要将php处理程序的代码放在functions.php中,而不是一个自定义页面)