2009-08-29 2 views
6

Помогите, я пытаюсь создать новое сообщение в своем блоге Wordpress с настраиваемыми полями, используя следующий скрипт perl, используя metaweblogAPI над XMLRPC, но, похоже, проблема связана с настраиваемыми полями. Кажется, что только второе пользовательское поле (ширина) появляется. Невозможно правильно опубликовать «высоту». Когда я добавляю другое поле, я получаю ошибку «Нечетное число элементов в анонимной хешировании». Это должно быть что-то простое - может ли кто-нибудь добросовестно проверить мой синтаксис? Благодарю.Почему я получаю предупреждение «Нечетное число элементов в анонимном хеше» в Perl?

#!/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

См. Этот ответ на копирование hashref http://stackoverflow.com/a/7083603/2015531 – ophidion

ответ

13

Хотя технически обоснованный синтаксис, он не делает то, что вы думаете.

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

примерно эквивалентно что-то вроде:

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

, который, конечно, не то, что вы хотите. (Часть 0x881a168 будет меняться, это фактически адрес, где хранится hashref.)

Я не уверен, какой правильный синтаксис для настраиваемых полей. Вы можете попробовать

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

, который установит custom_fields в массив хешей. Но это может быть неправильно. Это зависит от того, что ожидает send_request.

+0

CJM, вы рок! Ваше предложение сработало. Оба настраиваемых поля опубликованы просто отлично;) Большое спасибо! – Jim