опубликовать в WordPress с CURL - PullRequest
0 голосов
/ 07 мая 2011

Я попытался опубликовать в WordPress блог из внешнего PHP-кода, все мои файлы находятся в одном каталоге, public_html.

это мой код:

function wpPostXMLRPC1($title,$body,$rpcurl,$username,$password,$category,$keywords='',$encoding='UTF-8') {
$title = htmlentities($title,ENT_NOQUOTES,$encoding);
$keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);

$content = array(
    'title'=>$title,
    'description'=>$body,
    'mt_allow_comments'=>0,  // 1 to allow comments
    'mt_allow_pings'=>0,  // 1 to allow trackbacks
    'post_type'=>'post',
    'mt_keywords'=>$keywords,
    'categories'=>array($category)
);
$params = array(0,$username,$password,$content,true);
$request = xmlrpc_encode_request('metaWeblog.newPost',$params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $rpcurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$results = curl_exec($ch);
curl_close($ch);
return $results;
}

но это неправильно, ошибка

Fatal error: Call to undefined function xmlrpc_encode_request()

Я могу опубликовать в своем WordPress блоге с помощью Microsoft Word (Publish-> BlogPost), так что Помогите мне

Ответы [ 4 ]

2 голосов
/ 07 мая 2011

Расширение PHP xmlrpc, похоже, не включено на вашем сервере.

1 голос
/ 23 июля 2011

Wordpress, использующий http://scripts.incutio.com/xmlrpc/ в качестве сервера xmlrpc, вам не нужно расширение xmlrpc для публикации на вашем wp.Просто следуйте инструкции http://scripts.incutio.com/xmlrpc/advanced-client-construction.php.

Но если вы хотите опубликовать другим способом, например, отправить по электронной почте, вы можете следовать этому руководству codex.wordpress.org/Post_to_your_blog_using_email

0 голосов
/ 01 марта 2013

Неустранимая ошибка: вызов неопределенной функции xmlrpc_encode_request ()

иногда эта ошибка появляется, потому что расширение xmlrpc отключено.

выполните phpinfo (), чтобы увидеть, отображается модуль xmlrpc или нет.

Если нет, вам нужно включить его из php.ini, удалив точку с запятой, например

; расширение = php_xmlrpc.dll до расширения = php_xmlrpc.dll

и затем перезапустите Apache

0 голосов
/ 26 июля 2011

Я боролся с тем же.Я нашел похожую проблему где-то еще в сети и настроил ее, чтобы соответствовать Wordpress.Имейте в виду установку Wordpress (wordpress.org), а не службу хостинга блогов на wordpress.com.Это должно работать, если у вас включены curl и xmlwriter:

<?php
class atompub
    {

    //public $parae = '';

    function __construct($one, $two, $three, $four)
        {
        $this->author=$one;
        $this->title=$two;
        $this->categories=$three;
        $this->body=$four;
        }

    function create_post() 
        {
        $xmlwriter = new XMLWriter();
        $xmlwriter->openMemory();
        $xmlwriter->startDocument("1.0", "UTF-8");
            $xmlwriter->startElement('entry');
                $xmlwriter->writeAttribute('xmlns', 'http://www.w3.org/2005/Atom');
                $xmlwriter->startElement('author');
                    $xmlwriter->writeElement('name', $this->author);
                $xmlwriter->endElement();
                $xmlwriter->writeElement('title', $this->title);
                $xmlwriter->startElement('content');
                    $xmlwriter->writeAttribute('type', 'html');
                    $xmlwriter->text($this->body);
                $xmlwriter->endElement();
                $xmlwriter->startElement('category');
                    $xmlwriter->writeAttribute('term', $this->categories);
                $xmlwriter->endElement();
            $xmlwriter->endElement();
        $xmlwriter->endDocument();

        return $xmlwriter->outputMemory();
        }

    function __destruct()
        {
        }
    }


$target = "<URL til your WordPress installation>/wp-app.php/posts";  
// Note that the directory "posts" are used for posting (POST method)
// "service" is used to pull info via the GET method (not shown here)

$user = "XXX";  // Substitue XXX with your WordPress username
$passwd = "YYY";   // Substitue XXX with your WordPress password

$author='Your Name';
$title='The title of your choice for your new entry';
$array_of_categories='Category';
$body='This is the main body. All the text goes in here';

$xml_post = new atompub($author,$title,$array_of_categories,$body);
$post = $xml_post->create_post();

$headers = array("Content-Type: application/atom+xml ");
$handle = curl_init($target);
$curlopt_array = array(
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERPWD => $user.':'.$passwd,
CURLOPT_FOLLOWLOCATION => true,
CURLINFO_HEADER_OUT => true);
curl_setopt_array($handle, $curlopt_array);

$result = curl_exec($handle);
//var_dump($result);
$header_sent=curl_getinfo($handle);
//var_dump($header_sent);

if ($result === false) {
print "Got " . curl_errno($handle) . " : " . curl_error($handle) . "\n";
curl_close ($handle);
return;
}

$response_http_code = curl_getinfo ($handle, CURLINFO_HTTP_CODE);
if ($response_http_code != 201) {
print("HTTP status code: $response_http_code \n");
curl_close($handle);
return;
}

curl_close($handle);

?>

Это должно работать напрямую, но вам нужно изменить указанные строки (URL-адрес блога, имя пользователя, пароль, автор и т. Д.).Остерегайтесь, что логин небезопасен.Это только для демонстрации функциональности.Вы также можете изменить обработку кода ответа (это не мое, оно пришло вместе с исходным примером, на котором это основано).

В случае успеха Wordpress возвращает вам XML с деталями события post.

...