register_rest_field()

最后更新于:2021-11-27 21:36:48

register_rest_field( string|array$object_type, string$attribute, array$args=array())

Registers a new field on an existing GeChiUI object type.

参数

$object_type

(string|array) (Required) Object(s) the field is being registered to, “post”|”term”|”comment” etc.

$attribute

(string) (Required) The attribute name.

$args

(array) (Optional) An array of arguments used to handle the registered field.

  • ‘get_callback’
    (callable|null) Optional. The callback function used to retrieve the field value. Default is ‘null’, the field will not be returned in the response. The function will be passed the prepared object data.
  • ‘update_callback’
    (callable|null) Optional. The callback function used to set and update the field value. Default is ‘null’, the value cannot be set or updated. The function will be passed the model object, like GC_Post.
  • ‘schema’
    (array|null) Optional. The schema for this field. Default is ‘null’, no schema entry will be returned.

Default value: array()

源文件

文件: gc-includes/rest-api.php

function register_rest_field( $object_type, $attribute, $args = array() ) {
	$defaults = array(
		'get_callback'    => null,
		'update_callback' => null,
		'schema'          => null,
	);

	$args = gc_parse_args( $args, $defaults );

	global $gc_rest_additional_fields;

	$object_types = (array) $object_type;

	foreach ( $object_types as $object_type ) {
		$gc_rest_additional_fields[ $object_type ][ $attribute ] = $args;
	}
}
// Make sure to use PHP >= 5.4
add_action(
	'rest_api_init',
	function () {
		// Field name to register.
		$field = 'my_field';
		register_rest_field(
			'post',
			$field,
			array(
				'get_callback'    => function ( $object ) use ( $field ) {
					// Get field as single value from post meta.
					return get_post_meta( $object['id'], $field, true );
				},
				'update_callback' => function ( $value, $object ) use ( $field ) {
					// Update the field/meta value.
					update_post_meta( $object->ID, $field, $value );
				},
				'schema'          => array(
					'type'        => 'string',
					'arg_options' => array(
						'sanitize_callback' => function ( $value ) {
							// Make the value safe for storage.
							return sanitize_text_field( $value );
						},
						'validate_callback' => function ( $value ) {
							// Valid if it contains exactly 10 English letters.
							return (bool) preg_match( '/A[a-z]{10}Z/', $value );
						},
					),
				),
			)
		);
	}
);
add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {

	// register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
	register_rest_field( 'post', 'post-meta-fields', array(
	       'get_callback'    => 'get_post_meta_for_api',
	       'schema'          => null,
	    )
	);
}

function get_post_meta_for_api( $object ) {
	//get the id of the post object array
	$post_id = $object['id'];

	//return the post meta
 	return get_post_meta( $post_id );
}
$meta = [
    'key' => 'my_post_type_name',
    'description' => 'This is the name of my post type',
    'type' => 'string'
];

register_rest_field('my_post_type', $meta['key'], [
    'get_callback' => function ($params) use ($meta) {
        return get_post_meta($params['id'], $meta['key'], true);
    },
    'update_callback' => function ($value, $object, $fieldName){
        return update_post_meta($object->ID, $fieldName, $value);
    }
]);
function add_last_date_data() {
  //Last date
  register_rest_field( 'post',
    'last_date',
    array(
        'get_callback'  => 'rest_get_last_date',
        'update_callback'   => null,
        'schema'            => null,
     )
  );
}
function rest_get_last_date( $object ) {
    //get the Post Id
    $post_id = $object['id'];
	global $gcdb;
	$sql = "SELECT * FROM gc_it_job_details WHERE post_id = '$post_id'"; //gc_it_job_details is job table
	$results = $gcdb->get_row($sql);
		if(count($results) > 0) {
			//We have this post_id row in the table
			return $results->last_date;	//last_date is the column name, change to your's
    
		} else return ""; //return nothing 
		
    
}
add_action( 'rest_api_init', 'add_last_date_data' );
// assume there custom post_type named events 
add_action( 'rest_api_init', function() {
    register_rest_field( 'events', 'event_date', array(

        'get_callback' => function( $comment_arr ) {
            $comment_obj = get_field('event_date', $comment_arr['id'] );
            return $comment_obj;
        },

        'update_callback' => function( $karma, $comment_obj ) {
            update_field('event_date', $karma, $comment_arr['id'] );
            return true;
        },

        'schema' => array(
            'event_date' => __( 'event_date' ),
            'type'        => 'text'
        ),

    ));

});