Как мне установить cookie в обработчике запросов ajax wordpress? - PullRequest
4 голосов
/ 02 декабря 2011

Я пытаюсь установить cookie в обработчике запросов wp ajax, но безуспешно.
Надеюсь, что кто-то может мне помочь.

Вот код на стороне клиента:

var foo = $('#foo');
$.ajax({
    url: 'http://127.0.0.1/wordpress/wp-admin/admin-ajax.php',
    type:   'post',
    dataType:   'json',
    cache:  'false',
    data: { 'action' : 'foo', 'foo' : foo.val(), 'nonce' : foo.data('nonce') },
    success: function(data) { console.debug(data) },
    error: function() { console.error('fail') }
});

Вот плагин:

function foo() {
    check_ajax_referer( 'foo-my-nonce', 'nonce', 'what?!' );

    if (isset($_POST['foo'])) {
        $dir = pathinfo($_SERVER['REQUEST_URI']);
        $dir['dirname'] = $dir['dirname'].'/';
        setcookie('foo', $_POST['foo'], time()+62208000, $dir['dirname'], $_SE    RVER['HTTP_HOST']);

        $output = array('response' => 'success', 'message' => 'have fun');
    }
    else
        $output = array('response' => 'failed', 'message' => 'you are a loser');

    header("Content-type: application/json");
    echo json_encode( $output );
    exit;
 }

 add_action('wp_ajax_nopriv_foo','foo');

1 Ответ

4 голосов
/ 16 декабря 2011

Хорошо, ребята, я исправил это. Для того, чтобы это работало, вы должны установить путь к куки-файлу в «/» (корень) сайта, вместо текущего «post» или «dirname»:

Вместо:

setcookie('foo', $_POST['foo'], time()+62208000, $dir['dirname'], $_SERVER['HTTP_HOST']);

Использование:

setcookie('foo', $_POST['foo'], time()+62208000, '/', $_SERVER['HTTP_HOST']);

...