【问题标题】:Why AJAX posting Wordpress not works?为什么 AJAX 发布 Wordpress 不起作用?
【发布时间】:2014-11-07 15:24:57
【问题描述】:

我尝试在前端通过 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);
    });
});

【问题讨论】:

  • 首先您应该验证您的 ajax 调用是否达到了您的功能。现在你没有返回任何东西,最后只是一个 die(); 应该返回 0。你首先在函数中回显一些东西怎么样。
  • 如果没有,请尝试使用对象而不是包含action 参数的序列化数据字符串。
  • @MSTannu,函数应该返回帖子 ID。如果不使用 Ajax 就可以发送数据
  • wp_insert_post 返回一个值,但要将其发回您还需要回显它。
  • @MSTannu,你能帮忙吗?我不明白你的意思

标签: php ajax wordpress frontend posting


【解决方案1】:

要检查你是否真的从 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。

【讨论】:

  • 你的 wp_localize_script 有点不对劲,试试这个版本:wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' =&gt; admin_url( 'admin-ajax.php' ), 'action' =&gt; 'my_action' ) );。请注意,我删除了 post_title,因为那时还不会设置它。
【解决方案2】:

您可以先尝试将帖子插入代码注释一会儿,然后回显“到达的ajax处理程序”,首先验证ajax请求是否成功,然后您可以继续添加帖子插入代码一步一步来。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 2013-12-20
      • 2014-08-02
      • 1970-01-01
      • 2019-06-04
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多