редактирование custom_fields при удаленном постинге через XML-RPC

atranca
На сайте с 27.02.2011
Offline
126
715

думал справлюсь своими силами .

Пишу автопостер в вордпресс через XML-RPC (на вордпресс)

Вобщем при постинге никаких проблемм нет.

Далее мне необходимо (примерно раз в неделю) сравнивать

мой пост с оригиналом и вносить изменения на свой сайт.

с удаленной правкой не возникает проблемм пока не дохожу до

правки произвольных полей (таксономий). Вот тут тупик.....

Если основные поля (как тайтл, дескрипшн и т д) правятся в легкую,

то при обращении к custom_fields (например цену необходимо править)

тупо добавляется новое поле ....

например исходное состояние файла XML


-<wp:postmeta>

<wp:meta_key>price</wp:meta_key>


-<wp:meta_value>

<![CDATA[150 000 ]]>

</wp:meta_value>

</wp:postmeta

при отправке запроса по типу


$content = array(



'title'=>$title,
'description'=>$body,
'post_type'=>'post',
'mt_keywords'=>$keywords,
'categories'=>array($category),
'custom_fields' => array(array(
'key' => 'price',
'value' => $price1,

)
,'struct')

правится все поля КРОМЕ price

Просто в ХМЛ добавляется еще одно такое же поле поле (кроме существующего)

Например так


<wp:postmeta>

<wp:meta_key>price</wp:meta_key>


-<wp:meta_value>

<![CDATA[150 000 ]]>

</wp:meta_value>

</wp:postmeta


<wp:postmeta>

<wp:meta_key>price</wp:meta_key>


-<wp:meta_value>

<![CDATA[140 000 ]]>

</wp:meta_value>

</wp:postmeta

Здесь видно, что цена не правится а дописывается новое поле

Что-то в запросе я упустил (скорее всего какойто параметр типа id но где его смотреть не знаю)

Вобщем за помощь отблагодарю

123
IL
На сайте с 20.04.2007
Offline
435
#1
atranca:
Что-то в запросе я упустил (скорее всего какойто параметр типа id но где его смотреть не знаю)

Перед обновлением поста - получить информацию о нём при помощи getPost (да, + один запрос)

http://lists.automattic.com/pipermail/wp-xmlrpc/2009-April/000324.html

> It looks to me like the only way to update the custom fields in a
> post via this api is to get the post, remember the custom field ids
> and then call edit post, referring to those custom field ids again
> with updated info. Those custom field ids are unique to each post.

* несмотря на давность обсуждения, актуально.

В файле (~ 269 строка) wp-includes/class-wp-xmlrpc-server.php


function set_custom_fields($post_id, $fields) {
...
if ( isset($meta['id']) ) {
...
} elseif ( current_user_can( 'add_post_meta', $post_id, wp_unslash( $meta['key'] ) ) ) {
add_post_meta( $post_id, $meta['key'], $meta['value'] );
}
}

Т.е. если id не указан, custom_fields не редактируется, а добавляется.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
atranca
На сайте с 27.02.2011
Offline
126
#2
ivan-lev:
Перед обновлением поста - получить информацию о нём при помощи getPost (да, + один запрос)

http://lists.automattic.com/pipermail/wp-xmlrpc/2009-April/000324.html

* несмотря на давность обсуждения, актуально.
В файле (~ 269 строка) wp-includes/class-wp-xmlrpc-server.php

function set_custom_fields($post_id, $fields) {
...
if ( isset($meta['id']) ) {
...
} elseif ( current_user_can( 'add_post_meta', $post_id, wp_unslash( $meta['key'] ) ) ) {
add_post_meta( $post_id, $meta['key'], $meta['value'] );
}
}

Т.е. если id не указан, custom_fields не редактируется, а добавляется.

Спасибо большое- отписался вам в личку...

Ответьте пожалуйста.

В сети инфы ноль по данному вопросу.

Что тут проще сделать? отредактировать class-wp-xmlrpc-server.php (нехотелось бы конечно) или запрос добавить (тоже свой косяк- на один запрос больше к блогу)

atranca
На сайте с 27.02.2011
Offline
126
#3

решение благодаря предыдущему посту нашел.

Действительно надо делать еще один запрос

если кому то интересно- код работающего запроса



<?php
require_once("IXR_Library.php");

$client = new IXR_Client('http://ваш_сайт/xmlrpc.php');
if (!$client->query('metaWeblog.getPost', 'здесь айди поста например 47901', 'admin', 'password'))
{
die('Something went wrong - '.$client->getErrorCode().' : '.$client->getErrorMessage());
}
$clientResponse = $client->getResponse();
print_r($clientResponse);

?>

Тему можно закрывать.

Bitman
На сайте с 05.07.2009
Offline
112
#4

На всякий случай дополню. XML-RPC WordPress API - на строне, разумеется, WP можно расширить своими методами. Т.е. если что то специфическое, что бы не бомбить запросами сайт, то проще свой метод написать (http://codex.wordpress.org/XML-RPC_Extending) который в один запрос всё сделает.

Северный лес (https://euro-vagonka.by) DREW (https://drew.by) AvtoDrive (https://avtodrive.by)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий