• Resolved azemar

    (@azemar)


    Hey, I am probably missing something simple, but anyway couple things which doesn’t seem to be mentioned in documentation:
    1) Thumbnail – passing it as parameter what do I set its value to, currently anything I try does nothing? I am using create_post and passing image as attachment.
    2) Custom_fields – passing an object, should I pass json of lets say {“field1″:1,”field2″:”la”} or what?

    In other words how to pass these two parameters in POST request.

    https://ww.wp.xz.cn/plugins/json-api/

Viewing 3 replies - 1 through 3 (of 3 total)
  • Thread Starter azemar

    (@azemar)

    Nevermind modified it to fit my needs.

    Can you please explain or write code how did you resolved this?

    I am having trouble posting custom_fields via JSON API? What should to write to custom fields?

    Thanks in advance

    Thread Starter azemar

    (@azemar)

    It has been a while so I am a bit unsure what changes exactly I did, but maybe you’ll get something out of this.
    This is modified plugin file under /model/post.php

    <?php
    
    class JSON_API_Post {
    
      // Note:
      //   JSON_API_Post objects must be instantiated within The Loop.
    
      var $id;              // Integer
      var $type;            // String
      var $slug;            // String
      var $url;             // String
      var $status;          // String ("draft", "published", or "pending")
      var $title;           // String
      var $title_plain;     // String
      var $content;         // String (modified by read_more query var)
      var $excerpt;         // String
      var $date;            // String (modified by date_format query var)
      var $modified;        // String (modified by date_format query var)
      var $categories;      // Array of objects
      var $tags;            // Array of objects
      var $author;          // Object
      var $comments;        // Array of objects
      var $attachments;     // Array of objects
      var $comment_count;   // Integer
      var $comment_status;  // String ("open" or "closed")
      var $thumbnail;       // String
      var $custom_fields;   // Object (included by using custom_fields query var)
    
      function JSON_API_Post($wp_post = null) {
        if (!empty($wp_post)) {
          $this->import_wp_object($wp_post);
        }
        do_action("json_api_{$this->type}_constructor", $this);
      }
    
      function create($values = null) {
        unset($values['id']);
        if (empty($values) || empty($values['title'])) {
          $values = array(
            'title' => 'Untitled',
            'content' => ''
          );
        }
        return $this->save($values);
      }
    
      function update($values) {
        $values['id'] = $this->id;
        return $this->save($values);
      }
    
      function save($values = null) {
        global $json_api, $user_ID;
    
        $wp_values = array();
    
        if (!empty($values['id'])) {
          $wp_values['ID'] = $values['id'];
        }
    
        if (!empty($values['type'])) {
          $wp_values['post_type'] = $values['type'];
        }
    
        if (!empty($values['status'])) {
          $wp_values['post_status'] = $values['status'];
        }
    
        if (!empty($values['title'])) {
          $wp_values['post_title'] = $values['title'];
        }
    
        if (!empty($values['content'])) {
          $wp_values['post_content'] = $values['content'];
        }
    
        if (!empty($values['author'])) {
          $author = $json_api->introspector->get_author_by_login($values['author']);
          $wp_values['post_author'] = $author->id;
        }
    
        if (isset($values['categories'])) {
          $categories = explode(',', $values['categories']);
          foreach ($categories as $category_slug) {
            $category_slug = trim($category_slug);
            $category = $json_api->introspector->get_category_by_slug($category_slug);
            if (empty($wp_values['post_category'])) {
              $wp_values['post_category'] = array($category->id);
            } else {
              array_push($wp_values['post_category'], $category->id);
            }
          }
        }
    
        if (isset($values['tags'])) {
          $tags = explode(',', $values['tags']);
          foreach ($tags as $tag_slug) {
            $tag_slug = trim($tag_slug);
            if (empty($wp_values['tags_input'])) {
              $wp_values['tags_input'] = array($tag_slug);
            } else {
              array_push($wp_values['tags_input'], $tag_slug);
            }
          }
        }
    
        if (isset($wp_values['ID'])) {
          $this->id = wp_update_post($wp_values);
        } else {
          $this->id = wp_insert_post($wp_values);
        }
    
        if (!empty($_FILES['attachment'])) {
          include_once ABSPATH . '/wp-admin/includes/file.php';
          include_once ABSPATH . '/wp-admin/includes/media.php';
          include_once ABSPATH . '/wp-admin/includes/image.php';
          $attachment_id = media_handle_upload('attachment', $this->id);
          $this->attachments[] = new JSON_API_Attachment($attachment_id);
    
          $meta_value = get_post_meta( $this->id, '_easy_image_gallery');
          $errors = array_filter($errors);
    
          if (empty($errors)) {
            array_push($meta_value, ',', $attachment_id);
          }else{
             array_push($meta_value, $attachment_id);
          }
    
          update_post_meta( $this->id, '_easy_image_gallery',  implode(" ",$meta_value));
          update_post_meta( $this->id, '_easy_image_gallery_link_images',  'on');
          unset($_FILES['attachment']);
        }
    
        if (!empty($values['thumbnail'])) {
          update_post_meta( $this->id, '_thumbnail_id', $attachment_id);
        }
    
        if (!empty($values['emptyParam'])) {
        }
    
        if (isset($values['comments'])) {
          $data = array(
            'comment_post_ID' => $this->id,
            'user_id' => $values['authorName'],
            'comment_author' => $author,
            'comment_content' => $values['comments'],
            'comment_parent' => $values['attachmentId'],
            'comment_date' => $time,
          );
    
          wp_insert_comment($data);
        }
    
        if (isset($values['attachmentUpdateId'])) {
          wp_update_post(
                  array (
                    'ID'            => $values['attachmentUpdateId'],
                    'post_title'    => $values['attachmentUpdateTitle'],
                    'post_excerpt'  => $values['attachmentUpdateContent'],
          ));
        }
    
        foreach($values as $key => $value){
          if(strlen(strstr($key,'id'))==0 &&
          strlen(strstr($key,'type'))==0 &&
          strlen(strstr($key,'status'))==0 &&
          strlen(strstr($key,'title'))==0 &&
          strlen(strstr($key,'content'))==0 &&
          strlen(strstr($key,'nonce'))==0 &&
          strlen(strstr($key,'attachment'))==0 &&
          strlen(strstr($key,'cookie'))==0 &&
          strlen(strstr($key,'author'))==0 &&
          strlen(strstr($key,'categories'))==0 &&
          strlen(strstr($key,'thumbnail'))==0 &&
          strlen(strstr($key,'emptyParam'))==0 &&
          strlen(strstr($key,'comments'))==0 &&
          strlen(strstr($key,'authorName'))==0 &&
          strlen(strstr($key,'attachmentId'))==0 &&
          strlen(strstr($key,'attachmentUpdateId'))==0 &&
          strlen(strstr($key,'attachmentUpdateTitle'))==0 &&
          strlen(strstr($key,'attachmentUpdateContent'))==0 &&
          strlen(strstr($key,'tags'))==0)//it must be a custom_field, so add it
            update_post_meta($this->id,$key,$value);
        }
    
        $wp_post = get_post($this->id);
        $this->import_wp_object($wp_post);
    
        return $this->id;
      }
    
      function import_wp_object($wp_post) {
        global $json_api, $post;
        $date_format = $json_api->query->date_format;
        $this->id = (int) $wp_post->ID;
        setup_postdata($wp_post);
        $this->set_value('type', $wp_post->post_type);
        $this->set_value('slug', $wp_post->post_name);
        $this->set_value('url', get_permalink($this->id));
        $this->set_value('status', $wp_post->post_status);
        $this->set_value('title', get_the_title($this->id));
        $this->set_value('title_plain', strip_tags(@$this->title));
        $this->set_content_value();
        $this->set_value('excerpt', apply_filters('the_excerpt', get_the_excerpt()));
        $this->set_value('date', get_the_time($date_format));
        $this->set_value('modified', date($date_format, strtotime($wp_post->post_modified)));
        $this->set_categories_value();
        $this->set_tags_value();
        $this->set_author_value($wp_post->post_author);
        $this->set_comments_value();
        $this->set_attachments_value();
        $this->set_value('comment_count', (int) $wp_post->comment_count);
        $this->set_value('comment_status', $wp_post->comment_status);
        $this->set_thumbnail_value();
        $this->set_custom_fields_value();
        $this->set_custom_taxonomies($wp_post->post_type);
        do_action("json_api_import_wp_post", $this, $wp_post);
      }
    
      function set_value($key, $value) {
        global $json_api;
        if ($json_api->include_value($key)) {
          $this->$key = $value;
        } else {
          unset($this->$key);
        }
      }
    
      function set_content_value() {
        global $json_api;
        if ($json_api->include_value('content')) {
          $content = get_the_content($json_api->query->read_more);
          $content = apply_filters('the_content', $content);
          $content = str_replace(']]>', ']]>', $content);
          $this->content = $content;
        } else {
          unset($this->content);
        }
      }
    
      function set_categories_value() {
        global $json_api;
        if ($json_api->include_value('categories')) {
          $this->categories = array();
          if ($wp_categories = get_the_category($this->id)) {
            foreach ($wp_categories as $wp_category) {
              $category = new JSON_API_Category($wp_category);
              if ($category->id == 1 && $category->slug == 'uncategorized') {
                // Skip the 'uncategorized' category
                continue;
              }
              $this->categories[] = $category;
            }
          }
        } else {
          unset($this->categories);
        }
      }
    
      function set_tags_value() {
        global $json_api;
        if ($json_api->include_value('tags')) {
          $this->tags = array();
          if ($wp_tags = get_the_tags($this->id)) {
            foreach ($wp_tags as $wp_tag) {
              $this->tags[] = new JSON_API_Tag($wp_tag);
            }
          }
        } else {
          unset($this->tags);
        }
      }
    
      function set_author_value($author_id) {
        global $json_api;
        if ($json_api->include_value('author')) {
          $this->author = new JSON_API_Author($author_id);
        } else {
          unset($this->author);
        }
      }
    
      function set_comments_value() {
        global $json_api;
        if ($json_api->include_value('comments')) {
          $this->comments = $json_api->introspector->get_comments($this->id);
        } else {
          unset($this->comments);
        }
      }
    
      function set_attachments_value() {
        global $json_api;
        if ($json_api->include_value('attachments')) {
          $this->attachments = $json_api->introspector->get_attachments($this->id);
        } else {
          unset($this->attachments);
        }
      }
    
      function set_thumbnail_value() {
        global $json_api;
        if (!$json_api->include_value('thumbnail') ||
            !function_exists('get_post_thumbnail_id')) {
          unset($this->thumbnail);
          return;
        }
        $attachment_id = get_post_thumbnail_id($this->id);
        if (!$attachment_id) {
          unset($this->thumbnail);
          return;
        }
        $thumbnail_size = $this->get_thumbnail_size();
        $this->thumbnail_size = $thumbnail_size;
        $attachment = $json_api->introspector->get_attachment($attachment_id);
        $image = $attachment->images[$thumbnail_size];
        $this->thumbnail = $image->url;
        $this->thumbnail_images = $attachment->images;
      }
    
      function set_custom_fields_value() {
        global $json_api;
        if ($json_api->include_value('custom_fields')) {
          $wp_custom_fields = get_post_custom($this->id);
          $this->custom_fields = new stdClass();
          if ($json_api->query->custom_fields) {
            $keys = explode(',', $json_api->query->custom_fields);
          }
          foreach ($wp_custom_fields as $key => $value) {
            if ($json_api->query->custom_fields) {
              if (in_array($key, $keys)) {
                $this->custom_fields->$key = $wp_custom_fields[$key];
              }
            } else if (substr($key, 0, 1) != '_') {
              $this->custom_fields->$key = $wp_custom_fields[$key];
            }
          }
        } else {
          unset($this->custom_fields);
        }
      }
    
      function set_custom_taxonomies($type) {
        global $json_api;
        $taxonomies = get_taxonomies(array(
          'object_type' => array($type),
          'public'   => true,
          '_builtin' => false
        ), 'objects');
        foreach ($taxonomies as $taxonomy_id => $taxonomy) {
          $taxonomy_key = "taxonomy_$taxonomy_id";
          if (!$json_api->include_value($taxonomy_key)) {
            continue;
          }
          $taxonomy_class = $taxonomy->hierarchical ? 'JSON_API_Category' : 'JSON_API_Tag';
          $terms = get_the_terms($this->id, $taxonomy_id);
          $this->$taxonomy_key = array();
          if (!empty($terms)) {
            $taxonomy_terms = array();
            foreach ($terms as $term) {
              $taxonomy_terms[] = new $taxonomy_class($term);
            }
            $this->$taxonomy_key = $taxonomy_terms;
          }
        }
      }
    
      function get_thumbnail_size() {
        global $json_api;
        if ($json_api->query->thumbnail_size) {
          return $json_api->query->thumbnail_size;
        } else if (function_exists('get_intermediate_image_sizes')) {
          $sizes = get_intermediate_image_sizes();
          if (in_array('post-thumbnail', $sizes)) {
            return 'post-thumbnail';
          }
        }
        return 'thumbnail';
      }
    
    }
    
    ?>
Viewing 3 replies - 1 through 3 (of 3 total)

The topic ‘Custom Fields & Thumbnails’ is closed to new replies.