Intereting Posts
Ограничить поиск латинскими символами Создание и публикация эскизов Отображение одной строки из вложенного массива настраиваемых данных поля Запросить сообщения по пользовательскому идентификатору таксономии get_template_part внутри get_template_part? Как скрыть загрузку мультимедиа другими пользователями в меню «Медиа»? Как удалить одну определенную категорию (без категоризации) из постоянных ссылок Преобразование вывода функции the_permalink () в строку Пользовательская иерархическая таксономия теряет иерархию интерфейса при выборе родительских и дочерних Как получить сумму meta_values ​​meta_key в wp_query в соответствии с условиями Как я могу перенаправить свой блог на субдомен? Проблема, возникшая при попытке сохранить приватный веб-сайт Изменение раздела комментариев через плагин независимо от темы Не удается сортировать get_posts по post_mime_type Как создать пользовательский плагин, который позволяет анонимным пользователям регистрироваться без регистрации?

Как получить post_id после успешного создания нового сообщения с помощью xmlrpc api wp newPost?

Привет, я пытаюсь получить значение post_id после успешного выполнения моего кода. Из документации автоматически возвращается, как мне назначить ее другой переменной?

https://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

Примечание. API WP REST может быть лучшей альтернативой.

клиент

Предположим, мы используем встроенный WP_HTTP_IXR_CLIENT (см., Например, мой предыдущий ответ ):

 include_once( ABSPATH . WPINC . '/class-IXR.php' ); include_once( ABSPATH . WPINC . '/class-wp-http-ixr-client.php' ); $client = new WP_HTTP_IXR_CLIENT( 'https://example.tld/xmlrpc.php' ); $result = $client->query( 'wp.newPost', [ $blog_id = 0, $user = "user", // <-- Edit this $password = "password", // <-- Edit this [ 'post_status' => 'draft', // Here we use 'draft' while testing 'post_title' => 'xml-rpc testing - random ' . rand( 0, 999 ), 'post_content' => 'Hello xml-rpc!' , ] ] ); 

Мы не получаем новый идентификатор почтового сервера из $result , как и следовало ожидать.

Обратите внимание, что для успешного запроса метод WP_HTTP_IXR_Client::query возвращает true , иначе false .

wp.newPost

Успешный ответ wp.newPost похож на

 <?xml version="1.0"?> <methodCall> <methodName>wp.newPost</methodName> <params> <param><value><array><data> <value><int>0</int></value> <value><string>user</string></value> <value><string>password</string></value> <value><struct> <member><name>post_status</name><value><string>draft</string></value></member> <member><name>post_title</name><value><string>xml-rpc testing - random 471</string></value></member> <member><name>post_content</name><value><string>hello xml-rpc!</string></value></member> </struct></value> </data></array></value></param> </params></methodCall> <?xml version="1.0" encoding="UTF-8"?> <methodResponse> <params> <param> <value> <string>123</string> </value> </param> </params> </methodResponse> 

где мы отобразили его с помощью $client->debug = true; но обратите внимание, что это отображает пароль пользователя в открытом доступе!

Вот как клиент обрабатывает отладку:

 if ( $this->debug ) { echo '<pre class="ixr_response">' . htmlspecialchars( wp_remote_retrieve_body( $response ) ) . "\n</pre>\n\n"; } 

Сообщение

Так создается свойство message :

 $this->message = new IXR_Message( wp_remote_retrieve_body( $response ) ); 

а затем мы увидим, как WP_HTTP_IXR_CLIENT::query пытается разобрать его:

  if ( ! $this->message->parse() ) { // XML error $this->error = new IXR_Error(-32700, 'parse error. not well formed'); return false; } 

Он также проверяет тип сообщения об ошибке :

  // Is the message a fault? if ( $this->message->messageType == 'fault' ) { $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString); return false; } 

и в случае успеха он возвращает true:

  // Message must be OK return true; 

Соответствующий объект IXR_Message выглядит так:

 IXR_Message object ( [message] => [messageType] => methodResponse [faultCode] => [faultString] => [methodName] => [params] => Array ( [0] => 123 ) [_arraystructs] => Array ( ) [_arraystructstypes] => Array ( ) [_currentStructName] => Array ( ) [_param] => [_value] => [_currentTag] => [_currentTagContents] => [_parser] => Resource id #155 [currentTag] => string ) 

где 123 – новый идентификатор сообщения.

пример

Вот пример того, как мы могли бы получить новый идентификатор сообщения в пользовательском методе:

 $post_id = 0; if( ! is_a( $client->error, '\IXR_Error' ) ) return $post_id; if( ! is_a( $client->message, '\IXR_Message' ) ) return $post_id; if( 'methodResponse' !== $client->message->messageType ) return $post_id; if( ! isset( $client->message->params[0] ) ) return $post_id; $post_id = $client->message->params[0]; return $post_id; 

Надеюсь, поможет.