XML-RPC и post_date

8 окт. 2012 г., 02:26:50
Просмотры: 1.64K
Голосов: 1

Я пытаюсь установить post_date через XML-RPC, но постоянно получаю ошибку о неправильном формате XML. Код выглядит примерно так:

$post = get_post( $post_id );

$response = $client->query( 
    'wp.editPost',
    array( 
        0, 
        $user, 
        $pw, 
        array( 
            'post_date' => $post->post_date 
        ) 
    ) 
);

Та же проблема возникает с wp.newPost. Я знаю, что дата должна быть в формате ISO8601, но никак не могу правильно её отформатировать.

3
Комментарии

О, я был там много раз. Если это в первых 3 страницах результатов Google — я это пробовал. Эта точная строка возвращает ошибку неверного форматирования.

curtismchale curtismchale
8 окт. 2012 г. 06:39:29

Думаю, вам просто не хватает , здесь: 'wp.editPost' array между Array и методом. Вам стоит включить режим отладки, чтобы ловить опечатки и (что еще лучше) использовать нормальную IDE.

kaiser kaiser
8 окт. 2012 г. 11:43:53
Все ответы на вопрос 1
1

Здесь есть пара проблем. Во-первых, wp.editPost принимает четвертый параметр перед структурой контента — ID записи, которую вы пытаетесь отредактировать (должно быть целым числом).

Во-вторых, вы передаете строку для post_date, поэтому клиент автоматически преобразует ее в тег <string> перед отправкой на сервер... к сожалению, сервер ожидает тег <dateTime.iso8601>.

Вы можете исправить это, разобрав строку с датой и передав экземпляр класса IXR_Date вместо строки. Клиент обработает его правильно, и сервер отреагирует соответствующим образом. Я протестировал следующий сценарий на своем сервере:

$date = new IXR_Date( strtotime( $post->post_date ) );  // Преобразуем дату в объект IXR_Date.

$response = $client->query( 
    'wp.editPost',
    array( 
        0, 
        $user, 
        $pwd,
        $post_id,
        array( 
            'post_date' => $date 
        ) 
    ) 
);
8 окт. 2012 г. 19:46:26
Комментарии

Упс, пропустил поле. На самом деле оно у меня было (иначе другой контент не обновлялся бы, когда у меня была закомментирована дата).

curtismchale curtismchale
9 окт. 2012 г. 00:21:45