Wie bekomme ich post_id, nachdem Sie erfolgreich einen neuen Post mit xmlrpc api wp newPost erstellt haben?

Hi Ich versuche, den Wert von post_id zu erhalten, nachdem mein Code erfolgreich ausgeführt wurde. Aus der Dokumentation gibt es automatisch zurück, wie weise ich es einer anderen Variablen zu?

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

Solutions Collecting From Web of "Wie bekomme ich post_id, nachdem Sie erfolgreich einen neuen Post mit xmlrpc api wp newPost erstellt haben?"

Hinweis: Die WP-REST-API könnte eine bessere Alternative sein.

Klient

Nehmen wir an, wir benutzen das eingebaute WP_HTTP_IXR_CLIENT (siehe zB meine vorherige Antwort ):

 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!' , ] ] ); 

Wir erhalten die neue Server-Post-ID nicht wie erwartet aus dem $result .

Beachten Sie, dass die Methode WP_HTTP_IXR_Client::query für eine erfolgreiche Anforderung nur true zurückgibt, andernfalls false .

wp.newPost Antwort

Eine erfolgreiche wp.newPost Antwort ist wie

 < ?xml version="1.0"?>  wp.newPost   0 user password  post_statusdraft post_titlexml-rpc testing - random 471 post_contenthello xml-rpc!    < ?xml version="1.0" encoding="UTF-8"?>     123     

wo wir es mit $client->debug = true; Beachten Sie jedoch, dass hier das Benutzerpasswort im Open angezeigt wird!

So behandelt der Client das Debugging:

 if ( $this->debug ) { echo '
' . htmlspecialchars( wp_remote_retrieve_body( $response ) ) . "\n

\n\n"; }

Botschaft

So wird die Nachrichteneigenschaft konstruiert:

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

und dann können wir sehen, wie WP_HTTP_IXR_CLIENT::query versucht, es zu analysieren:

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

Es prüft auch den Fehlertyp :

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

und wenn es erfolgreich ist, wird es wahr:

  // Message must be OK return true; 

Das entsprechende IXR_Message Objekt sieht folgendermaßen aus

 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 ) 

Wobei 123 die neue Post-ID ist.

Beispiel

Hier ist ein Beispiel, wie wir die neue Post-ID in einer benutzerdefinierten Methode erhalten konnten:

 $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; 

Ich hoffe es hilft.