[Помогите] Xml-rpc постинг в wp

Тема в разделе "Wordpress", создана пользователем intertrey, 31 дек 2011.

Статус темы:
Закрыта.
Модераторы: Sorcus
  1. intertrey

    intertrey Писатель

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

    Для постинга на 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_Error405sprintf__'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_Error401__'Sorry, you cannot edit private posts.' ) );
        }
     
        if (!
    is_array($post_data)) {
            return new 
    IXR_Error401__'Sorry, no post data not found.' ) );
        }
     
        
    $id wp_insert_post$post_data );
     
        if (
    $id === 0) {
            return new 
    IXR_Error401__'Post save error.' ) );
        }
     
        
    $post = array();
        
    $post['id'] = $id;
        
    $post['permalink'] = get_permalink($id);
     
        return 
    $post;
    }
    На текущий момент отлично всё постит с таксономиями . Скажите мне пожалуйста, как мне передать картинку в секцию ''set featured image? Что поменять на стороне клиента и сервера. Может код у кого готовый есть, наверняка кто нить пытался передать.
     
  2. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    453
    Уже давно с ВП плотно не работал, но когда-то эти картинки сохранялись в так называемых "custom fields". Скорее всего оно до сих пор так и есть, просто они стандартизировали для картинок это дело. В общем если это так, то нужно просто передавать параметр custom_fields с правильным именем при XML-RPC постинге, скрипт ВП умеет прекрасно их обрабатывать.
     
  3. intertrey

    intertrey Писатель

    Регистр.:
    30 дек 2011
    Сообщения:
    6
    Симпатии:
    1
    А что он позволяет запостить картинку в custom fields ? Мне думалось тут надо wp чуток перепрограммировать, а не внешний клиент
     
  4. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    314
    Симпатии:
    98
    в свое время помогла вот эта статейка:



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