2015-04-20 3 views
1

Когда я пытаюсь редактировать custom_fields с помощью wp.editPost. Редактируйте только другие поля, но не настраиваемые поля. Пользовательские поля создаются снова (повторяющиеся поля), но их нужно будет отредактировать.wp.editPost 'API Wordpress' не редактирует настраиваемые поля

Ищу: http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.editPost

Мой массив пользовательских полей:

$content = array(
     'post_id' => (int)$idPostWp, 
     'title' => $modificarPostWpDecode['title'], //ok edit 
     'description' => $modificarPostWpDecode['content'], //ok edit 
     'categories' => $modificarPostWpDecode['category'], //ok edit 
     'custom_fields' => array(
      array('key' => 'precio', 'value' => $modificarPostWpDecodeCustom['price']), // no edit, fields will be create again 
      array('key' => 'category', 'value' => $modificarPostWpDecodeCustom['category']), // no edit, fields will be create again 
      array('key' => 'estrenar', 'value' => $modificarPostWpDecodeCustom['new']), // no edit, fields will be create again 
      array('key' => 'currency', 'value' => $modificarPostWpDecodeCustom['currency']), // no edit, fields will be create again 
      array('key' => 'search', 'value' => $modificarPostWpDecodeCustom['search']) // no edit, fields will be create again 
      ) 
    ); 

Мой призыв к WordPress является:

$params = array(1, WPUSER, WPPASS, (int)$idPostWp, $modificarPostWpDecode); 
    $request = xmlrpc_encode_request('wp.editPost', $params, array('encoding' => 'UTF-8', 'escaping' => 'markup')); 

Спасибо большое!

+0

В чем причина использования XML-RPC? Является ли PHP-код запущен на том же сервере wordpress? Если это так, XML-RPC не нужно использовать. – enigma

+0

Код находится на другом сервере. У меня такая же проблема с wp.editPost и metablog.editPost. – davidcm86

ответ

0

Как указано here, вы должны передать идентификатор настраиваемого поля, чтобы изменить поле, а не ключ, который приведет к созданию дубликата.

Так что вам нужно сделать два запроса, если вы уже не знаете пользовательские идентификаторы полей. Один запрос на получение всех пользовательских данных, просмотр полей и сбор соответствующих идентификаторов в поля, которые вы хотите обновить. Второй запрос обновит поля, указанные с использованием идентификаторов полей, а не только ключ.

Коллекция идентификаторов может выглядеть примерно следующим образом

$custom_fields_to_edit = array(
    'key1' => null, 
    'key2' => null 
    ); 

foreach($post->custom_fields as $custom){ 
    if (array_key_exists($custom->key, $custom_fields_to_edit)){ 
     $custom_fields_to_edit[$custom->key] = $custom->id; 
    } 
} 

где $post была собрана с использованием wp.getPost процедуры.

Затем вы можете продолжить, как и раньше, со следующей модификацией кода.

'custom_fields' => array(
    array('id' => $custom_fields_to_edit['key1'], 'key' => 'key1', 'value' => $modificarPostWpDecodeCustom['key1']), 
    array('id' => $custom_fields_to_edit['key2'], 'key' => 'key2', 'value' => $modificarPostWpDecodeCustom['key2']) 
    ) 
+1

Я знаю ключи, но не работаю. Я попытался использовать wp.editPost и metaWeblog.editPost, но это тот же результат ... Документация для metaWeblog: https://codex.wordpress.org/XML-RPC_MetaWeblog_API. С id, key, value результат ничего. Ничего не произошло. – davidcm86

+0

@ davidcm86 Ничего не происходит, буквально ничего не меняется на сервере, или только пользовательские поля не меняются? – enigma

+0

Пользовательские поля не меняются с помощью идентификатора структуры, ключа, значения – davidcm86