2009-08-29 2 views
6

Hilfe, ich versuche, einen neuen Beitrag in meinem Wordpress-Blog mit benutzerdefinierten Feldern mit dem folgenden Perl-Skript mit metaweblogAPI über XMLRPC zu erstellen, aber es scheint ein Problem mit den benutzerdefinierten Feldern zu sein. Nur das zweite benutzerdefinierte Feld (Breite) scheint jemals gepostet zu werden. Die "Höhe" kann nicht richtig veröffentlicht werden. Wenn ich ein weiteres Feld hinzufüge, erhalte ich die Fehlermeldung "Ungerade Anzahl von Elementen in anonymem Hash". Das muss etwas Einfaches sein - würde jemand, der gütig ist, meine Syntax überprüfen? Vielen Dank.Warum erhalte ich in Perl eine Warnung "Ungewöhnliche Anzahl an Elementen in anonymem Hash"?

#!/usr/bin/perl -w 
use strict; 
use RPC::XML::Client; 
use Data::Dumper; 

my $cli=RPC::XML::Client->new('http://www.sitename.com/wp/xmlrpc.php'); 

my $appkey="perl"; # doesn't matter 
my $blogid=1; # doesn't matter (except blogfarm) 

my $username="Jim"; 
my $passwd='_____'; 

my $text=<<'END'; 

This is the post content... 

You can also include html tags... 

See you! 
END 

my $publish=0; # set to 1 to publish, 0 to put post in drafts 

my $resp=$cli->send_request('metaWeblog.newPost', 
$blogid, 
$username, 
$passwd, 
{ 
    'title'  => "this is doodoo", 
    'description' => $text, 
    'custom_fields' => { 
    { "key" => "height", "value" => 500 }, 
    { "key" => "width", "value" => 750 } 
    }, 
}, 
$publish); 

exit 0; 
+0

Siehe diese Antwort zum Kopieren eines Hashref http://StackOverflow.com/a/7083603/2015531 – ophidion

Antwort

13

Während technisch gültige Syntax, tut es nicht, was Sie denken.

'custom_fields' => { 
    { "key" => "height", "value" => 500 }, 
    { "key" => "width", "value" => 750 } 
}, 

entspricht in etwa so etwas wie:

'custom_fields' => { 
    'HASH(0x881a168)' => { "key" => "width", "value" => 750 } 
}, 

die sicherlich nicht das, was Sie wollen. (Der 0x881a168 Teil wird variieren; es ist tatsächlich die Adresse, wo der Hashref gespeichert ist.)

Ich bin nicht sicher, was die richtige Syntax für benutzerdefinierte Felder ist. Sie können versuchen,

'custom_fields' => [ 
    { "key" => "height", "value" => 500 }, 
    { "key" => "width", "value" => 750 } 
], 

, die custom_fields zu einem Array von Hashes festlegen. Aber das ist vielleicht nicht richtig. Es hängt davon ab, was send_request erwartet.

+0

CJM, du rockst! Dein Vorschlag hat funktioniert. Beide benutzerdefinierten Felder erschienen gut;) Vielen Dank! – Jim

Verwandte Themen