wp_ajax_add_meta()

In this article

Handles adding meta via AJAX.

Source

function wp_ajax_add_meta() {	check_ajax_referer( 'add-meta', '_ajax_nonce-add-meta' );	$c = 0;	$pid = (int) $_POST['post_id'];	$post = get_post( $pid );	if ( isset( $_POST['metakeyselect'] ) || isset( $_POST['metakeyinput'] ) ) {	if ( ! current_user_can( 'edit_post', $pid ) ) {	wp_die( -1 );	}	if ( isset( $_POST['metakeyselect'] ) && '#NONE#' === $_POST['metakeyselect'] && empty( $_POST['metakeyinput'] ) ) {	wp_die( 1 );	}	// If the post is an autodraft, save the post as a draft and then attempt to save the meta.	if ( 'auto-draft' === $post->post_status ) {	$post_data = array();	$post_data['action'] = 'draft'; // Warning fix.	$post_data['post_ID'] = $pid;	$post_data['post_type'] = $post->post_type;	$post_data['post_status'] = 'draft';	$now = time();	$post_data['post_title'] = sprintf(	/* translators: 1: Post creation date, 2: Post creation time. */	__( 'Draft created on %1$s at %2$s' ),	gmdate( __( 'F j, Y' ), $now ),	gmdate( __( 'g:i a' ), $now )	);	$pid = edit_post( $post_data );	if ( $pid ) {	if ( is_wp_error( $pid ) ) {	$x = new WP_Ajax_Response(	array(	'what' => 'meta',	'data' => $pid,	)	);	$x->send();	}	$mid = add_meta( $pid );	if ( ! $mid ) {	wp_die( __( 'Please provide a custom field value.' ) );	}	} else {	wp_die( 0 );	}	} else {	$mid = add_meta( $pid );	if ( ! $mid ) {	wp_die( __( 'Please provide a custom field value.' ) );	}	}	$meta = get_metadata_by_mid( 'post', $mid );	$pid = (int) $meta->post_id;	$meta = get_object_vars( $meta );	$x = new WP_Ajax_Response(	array(	'what' => 'meta',	'id' => $mid,	'data' => _list_meta_row( $meta, $c ),	'position' => 1,	'supplemental' => array( 'postid' => $pid ),	)	);	} else { // Update?	$mid = (int) key( $_POST['meta'] );	$key = wp_unslash( $_POST['meta'][ $mid ]['key'] );	$value = wp_unslash( $_POST['meta'][ $mid ]['value'] );	if ( '' === trim( $key ) ) {	wp_die( __( 'Please provide a custom field name.' ) );	}	$meta = get_metadata_by_mid( 'post', $mid );	if ( ! $meta ) {	wp_die( 0 ); // If meta doesn't exist.	}	if (	is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) ||	! current_user_can( 'edit_post_meta', $meta->post_id, $meta->meta_key ) ||	! current_user_can( 'edit_post_meta', $meta->post_id, $key )	) {	wp_die( -1 );	}	if ( $meta->meta_value !== $value || $meta->meta_key !== $key ) {	$u = update_metadata_by_mid( 'post', $mid, $value, $key );	if ( ! $u ) {	wp_die( 0 ); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems).	}	}	$x = new WP_Ajax_Response(	array(	'what' => 'meta',	'id' => $mid,	'old_id' => $mid,	'data' => _list_meta_row(	array(	'meta_key' => $key,	'meta_value' => $value,	'meta_id' => $mid,	),	$c	),	'position' => 0,	'supplemental' => array( 'postid' => $meta->post_id ),	)	);	}	$x->send(); } 

Changelog

VersionDescription
3.1.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.