2017-04-04 6 views
1

私は、REST APIを使い始める前に、フロントエンドからの投稿を作成するためにこれを使用しました。タイトル、抜粋、コンテンツとともに投稿を公開しました。 私はカスタムメタフィールド値を追加したいと思います。どの例やヘルプも大歓迎です。メタフィールドを含む投稿を作成する - WP REST API

これは私のAjaxコード、メタ値を除いて正常に動作して他のすべてのフィールドがポスト

jQuery(document).ready(function ($) { 
$('#post-submission-form').on('submit', function(e) { 
    e.preventDefault(); 
    var title = $('#post-submission-title').val(); 
    var excerpt = $('#post-submission-excerpt').val(); 
    var content = $('#post-submission-content').val(); 
    var status = 'draft'; 

    var data = { 
     title: title, 
     excerpt: excerpt, 
     content: content, 
     status: status, 
     meta: { 
      'video_url_url' : 'abc', 
     } 

    }; 

    $.ajax({ 
     method: "POST", 
     url: POST_SUBMITTER.root + 'wp/v2/posts', 
     data: data, 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader('X-WP-Nonce', POST_SUBMITTER.nonce); 
     }, 
     success : function(response) { 
      console.log(response); 
      alert(POST_SUBMITTER.success); 
     }, 
     fail : function(response) { 
      console.log(response); 
      alert(POST_SUBMITTER.failure); 
     } 

    }); 

}); 

}に追加されていない)です。

+0

解決済み私は読んだり書いたりするためにまずメタフィールドを登録しなければならなかった。 '$ object_type = '投稿'; $ args1 = array(//メタ値の検証とサニタイズ // 'number'は 'type'として使用する必要があります 'type' => 'string'、 //メタキーのスキーマに表示されます。 'description' => '文字列メタ値に関連付けられたメタキー'、 //タイプ1の値を返します。 'single' => true、 // WP REST APIレスポンスで表示します。 'show_in_rest' => true、 ); register_meta($ object_type、 'video_url_url'、$ args1); ' –

+0

私は同じことをしようとしています。私はまだそれを働かせることはできません。あなたは私の質問を見てください:http://stackoverflow.com/q/43265580/100747 – input

答えて

0

はあなたのfunctions.phpにこれを追加します。

/** 
* Add the meta fields to REST API responses for posts read and write 
* Read and write a post meta fields in post responses 
*/ 
function mg_register_meta_api() { 
    //Meta Fields that should be added to the API 
    $meta_fields = array(
     'video_url_url', 
     'another_meta_key' 
    ); 
    //Iterate through all fields and add register each of them to the API 
    foreach ($meta_fields as $field) { 
     register_rest_field('ring', 
      $field, 
      array(
       'get_callback' => array($this, 'mg_fw_get_meta'), 
       'update_callback' => array($this, 'mg_fw_update_meta'), 
       'schema'   => null, 
      ) 
     ); 
    } 
} 
add_action('rest_api_init', 'mg_register_meta_api'); 

/** 
* Handler for getting custom field data. 
* 
* @since 0.1.0 
* 
* @param array $object The object from the response 
* @param string $field_name Name of field 
* 
* @return mixed 
*/ 
function mg_get_meta($object, $field_name) { 
    return get_post_meta($object[ 'id' ], $field_name); 
} 

/** 
* Handler for updating custom field data. 
* 
* @since 0.1.0 
* @link http://manual.unyson.io/en/latest/helpers/php.html#database 
* @param mixed $value The value of the field 
* @param object $object The object from the response 
* @param string $field_name Name of field 
* 
* @return bool|int 
*/ 
function mg_update_meta($value, $object, $field_name) { 
    if (! $value || ! is_string($value)) { 
     return; 
    } 

    return update_post_meta($object->ID, $field_name, maybe_serialize(strip_tags($value))); 
} 

今、あなたは、APIを使用して「video_url_url」を読んで、メタのために書くことができるはずです。

関連する問題