like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей

Почему не работает ajax front end постинг wordpress?

Добрый вечер господа,
вы моя последняя надежда)
я пытаюсь сделать для начала простой постинг с фронт энда посредством аякс.
В результате возвращается 0. Если сделать тоже самое, но без аякс, то постинг работает.
Что я делаю не так?

<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>


add_action('wp_ajax_nopriv_my_action', 'addpost_ajax_handler' );
add_action('wp_ajax_my_action', 'addpost_ajax_handler' );
function addpost_ajax_handler() {

    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 $result ;
    }
    die();
}


.js
$('#submit').on('click', function(e) {
	e.preventDefault();
	var title = $('input[name="post_title"]').val();
	var ajaxurl = '/wp-admin/admin-ajax.php';
        var data = { 'action': 'my_action', 'post_title': title }
		$.post(ajaxurl, data, function(response) {
		alert(response);
	});
});
  • Вопрос задан
  • 4044 просмотра
Решения вопроса 1
like-a-boss
@like-a-boss Автор вопроса
Признайся,тебяТянетНаКодМужика,ты—программный гей
разобрался, код рабочий. нужно было пхп обработчик сразу класть в functions.php и проблем было бы меньше) не знаю почему, но он не работает на произвольной странице, видимо эдд-экшены работают только из functions
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@vdem
1. Не нужно в data помещать уже сериализованные данные, это делается внутри jQuery.
2. В data должен быть параметр action, который в Вашем случае должен иметь значение 'my_action' (судя по названию обработчика в коде PHP).
3. Мне лично всё это не помогло, всё равно получал 0, но это связано с какой-то другой проблемой.
Ответ написан
@bulvar
Привет разобрался в коде вообще? У меня возникла похожая ситуация вот теперь маюсь что делать. Может подскажешь?
Ответ написан
@by_better
В конце функции обработчика необходимо вставить wp_die(); и всё работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы