• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Xml-rpc постинг в wp

Статус
В этой теме нельзя размещать новые ответы.

intertrey

Писатель
Регистрация
30 Дек 2011
Сообщения
6
Реакции
1
Версия Wordpress 3.0.0 и выше.
Что нужно: нужно сделать постинг в wp через xml-rpc на php с учётом таксономий и постинга картинки в поле(featured image). Пример поля на скриншоте. Часто темы вордпресса используют это поле чтобы выводить картинки для главной страницы у постов.
1325328258-clip-5kb.png


Для постинга на php использую библиотеку IXR_Library.php
Пример кода:

PHP:
function wp_post2($staring,$pageTags,$blogUrl, $username, $password, $pageId,$pageTitle,$description, $charset = 'windows-1251',$pageCategory = '',$pageDate_create=''){
        require_once ('./IXR_Library.php'); //подключаем библиотеку
     
        if($charset != 'utf-8'){
            $pageTitle = iconv($charset,"utf-8",$pageTitle);
            $description  = iconv($charset,"utf-8",$description);
       
 
            if(!empty($pageDate_create)){
                $pageDate_create = iconv($charset,"utf-8",$pageDate_create);
            }
        }
     
     
        $client = new IXR_Client("$blogUrl/xmlrpc.php");
        $client->timeout = 60000;
     
        $requestData[0] = 0; //id блога
        $requestData[1] = $username; //имя пользователя
        $requestData[2] = $password; //пароль
     
        $post = array();
     
        $post['post_title'] = $pageTitle;
        $post['post_category'] = array(22); //ID  категории
       
     
        $post['post_content'] = $description; // сам текст
        $post['post_status'] = 'publish'; // пост сразу публикуется
        $post['post_type'] = 'post'; // тип поста - тут возможно указать таксономия
        $post['tags_input'] = $pageTags;
        $post['comment_status'] = 'closed';
     
        if(!empty($pageDate_create))
            {
                    $pageDate_create = $this->parseTimestamp($pageDate_create);
                    $post['post_date_gmt'] = $pageDate_create;
                 
            }
     
     
        $post['tax_input']  =  array('model' => $staring);  // пример таксономий модели
     
        $requestData[3] = $post;
     
        if (!$client->query('my.publish_post', $requestData)) {
            echo 'Publish Post error: '.$client->getErrorMessage();
            return;
        }
     
        $publishedPost = $client->getResponse();
     
        $this->published($pageId);
             
        return TRUE;
             
     
     
    }

На стороне wp в файле function 1. Создаю таксономию
PHP:
function model_init() {
    register_taxonomy(
        'model',
        'post',
        array(
            'label' => __('model'),
            'labels'=>array(
                'name'=>__('models'),
                'singular_name'=>__('model'),
                'edit_item' => __( 'Edit model' ),
                'update_item' => __( 'Update model' ),
                'add_new_item' => __( 'Add New model' ),
                'new_item_name' => __( 'New model Name' ),
                'separate_items_with_commas' => __( 'Separate models with commas' ),
                'add_or_remove_items' => __( 'Add or remove models' ),
                'choose_from_most_used' => __( 'Choose from the most used models' ),
                'menu_name' => __( 'Models' ),               
           
            ),
            'sort' => true,
            'args' => array('orderby' => 'term_order'),
            'public'=>true,
            'show_in_nav_menus'=>true,
            'show_ui'=>true,
            'show_tagcloud'=>true,
            'hierarchical'=>false,
            'rewrite' => array('slug' => 'model'),
        )
    );
}
add_action( 'init', 'model_init' );
2. Видоизменяю функцию для xml сервера с учётом таксономий
PHP:
function my_publish_post($args) {
    $blog_id = (int) $args[0];
    $username = $args[1];
    $password = $args[2];
    $post_data  = $args[3];
 
    if ( !get_option( 'enable_xmlrpc' ) ) {
        return new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site.  An admin user can enable them at %s'),  admin_url('options-writing.php') ) );
    }
 
    $user = wp_authenticate($username, $password);
 
    if (is_wp_error($user)) {
        return new IXR_Error(403, __('Bad login/pass combination.'));
    }
 
    wp_set_current_user( $user->ID );
 
    if ( !current_user_can( 'edit_private_posts' ) ) {
        return new IXR_Error( 401, __( 'Sorry, you cannot edit private posts.' ) );
    }
 
    if (!is_array($post_data)) {
        return new IXR_Error( 401, __( 'Sorry, no post data not found.' ) );
    }
 
    $id = wp_insert_post( $post_data );
 
    if ($id === 0) {
        return new IXR_Error( 401, __( 'Post save error.' ) );
    }
 
    $post = array();
    $post['id'] = $id;
    $post['permalink'] = get_permalink($id);
 
    return $post;
}

На текущий момент отлично всё постит с таксономиями . Скажите мне пожалуйста, как мне передать картинку в секцию ''set featured image? Что поменять на стороне клиента и сервера. Может код у кого готовый есть, наверняка кто нить пытался передать.
 
Уже давно с ВП плотно не работал, но когда-то эти картинки сохранялись в так называемых "custom fields". Скорее всего оно до сих пор так и есть, просто они стандартизировали для картинок это дело. В общем если это так, то нужно просто передавать параметр custom_fields с правильным именем при XML-RPC постинге, скрипт ВП умеет прекрасно их обрабатывать.
 
в свое время помогла вот эта статейка:



ключевой момент: для того чтобы задать featured image надо знать id поста.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху