XMLRPC und Unterstrichene benutzerdefinierte Felder

Ich habe meine Anwendung erstellt, um alle meine Blogs von meinem Desktop aus zu automatisieren. Ziel, ich poste Blog. Das ist alles. Ich habe XMLRPC- Dienst verwendet, wie Sie “xmlrpc.php” wissen.

Ich habe viele Teile gebaut, fast fertig … Aber steckte in benutzerdefinierten Feldern, die mit (_) einem Unterstrich beginnen. Ich möchte als “_thumbnail_id” => (int) Nummer speichern. Nichts ist passiert.

Aber wenn ich “thumbnail_id” oder etwas ähnliches versuchte, ohne mit dem Unterstrich zu beginnen. Es ist in Ordnung. Gut arbeiten, aber mit Unterstreichung beginnen …

Ich brauche es, um das vorgestellte Bild des Posts zu bestimmen. Ohne dieses Etikett; Ich konnte nicht. Und ich kenne keine Alternativen.

Ich finde das: https://wordpress.org/support/topic/how-can-i-change-protected-params-xmlrpc Aber nicht mein Problem zu lösen. Ich möchte WordPress-Dateien nicht ändern. Wenn ich muss, kann ich ein kleines Skript ohne RPC schreiben.

Jede Hilfe wird FANTASTISCH sein!

Solutions Collecting From Web of "XMLRPC und Unterstrichene benutzerdefinierte Felder"

Abspielen mit XML-RPC und unterstrichenen benutzerdefinierten Feldern:

Nehmen wir an, wir möchten das vorgestellte Bild mit $remote_post_id auf einen bestimmten Post $remote_post_id .

Wir wollen, dass es der Anhang mit der ID 300 , also wollen wir _thumbnail_id auf 300 .

Hier sind drei Methoden, wie man das erreichen könnte:

Methode # 1 – Verwenden von post_thumbnail

Es ist möglich, das vorgestellte Bild mit dem Parameter post_thumbnail zu aktualisieren / hinzuzufügen:

 $result = $client->query( 'wp.editPost', array( $blog_id, $username, $password, $remote_post_id, $post_data = array( 'post_thumbnail' => '300', ), ) ); 

wie man sieht [hier in der wp_xmlrpc_server ] [1] class.

Methode 2 – Verwenden von custom_fields mit meta_id

Wenn wir ein benutzerdefiniertes Feld eines Beitrags aktualisieren möchten, müssen wir dessen database- meta_id Wert kennen.

Aber woher kennen wir die meta_id ?

Die benutzerdefinierten Felder sind standardmäßig enthalten, wenn wir einen Post mit folgenden Informationen abrufen:

 $result = $client->query( 'wp.getPost', array( $blog_id, $username, $password, $remote_post_id, ) ); 

Wenn der Beitrag eine hervorgehobene Post-Miniaturansicht enthält, enthält das obige Ergebnis diesen Teil:

  custom_fields       id  560    key  _thumbnail_id    value  200         

wo die meta_id zum Beispiel 560 und der alte meta_value 200 .

Jetzt können wir den Meta-Wert von _thumbnail_id mit unserem neuen Wert aktualisieren:

 $result = $client->query( 'wp.editPost', array( $blog_id, $username, $password, $remote_post_id, $post_data = array( 'custom_fields' => array( array( 'id' => '560', 'key' => '_thumbnail_id', 'value' => 300 ) ), ), ) ); 

Beachten Sie, dass wir, wenn wir den meta_id Teil überspringen, nur add_post_meta() anstelle von [ update_metadata_by_mid() ] [2] update_metadata_by_mid() , das in diesem Trac eingeführt wurde . Wir müssen auch die Fähigkeit edit_post_meta haben.

Aber das ist nicht die ganze Geschichte, denn Meta-Schlüssel, die mit Unterstrich (_) beginnen, sind geschützt .

Wir können das beheben, indem wir die function [ register_meta() ] [3] auf der Remote-Site verwenden.

Beispielsweise:

 /** * Unprotect the _thumbnail_id meta key to allow updates via XML-RPC * We need to set this up on the remote site. */ add_action( 'init', function() { register_meta( 'post', '_thumbnail_id', 'absint', '__return_true' ); }); 

_thumbnail_id Meta-Schlüssels _thumbnail_id Ich habe zuerst den intval als Sanitizierungs-Callback ausprobiert, aber das hat nicht funktioniert.

Wir könnten ein ähnliches Setup für andere geschützte Metaschlüssel verwenden.

Methode 3 Verwenden einer benutzerdefinierten XML-RPC-Methode.

Wie @MarkKaplun in seiner Antwort erwähnt, könnten wir das XML-RPC-Setup auf unsere Bedürfnisse erweitern. Wir könnten zum Beispiel den Filter xmlrpc_methods , um eine eigene Methode hinzuzufügen.

Der Kodex bietet weitere Informationen zu diesem Thema.

Verweise:

Hier sind einige Links, die mir beim Testen geholfen haben:

_Unterlegte Metadaten werden als Daten definiert, die innerhalb der Software liegen und nicht direkt von einem Benutzer geändert werden. Dies ist wahrscheinlich, warum Sie es nicht über XMLRPC ändern können.

Wenn Sie diese Art von functionalität benötigen, können Sie ein kleines Plugin schreiben, das den Datensatz erweitert, den Sie mit XMLRPC ändern können.

Aber da Sie Fragen speziell über vorgestellte Bilder haben, sollten Sie nach einem API suchen, mit dem Sie einen Anhang als vorgestellte Bilder zuordnen können. Fast Google hat keine Dokumentation dafür, aber scheint wie Menschen es erfolgreich getan haben https://stackoverflow.com/questions/12355922/set-featured-image-for-wordpress-post-via-xml-rpc .