WP_Customize_Nav_Menus::ajax_insert_auto_draft_post()publicWP 4.7.0

Ajax handler for adding a new auto-draft post.

Method of the class: WP_Customize_Nav_Menus{}

No Hooks.

Return

null. Nothing (null).

Usage

$WP_Customize_Nav_Menus = new WP_Customize_Nav_Menus();
$WP_Customize_Nav_Menus->ajax_insert_auto_draft_post();

Changelog

Since 4.7.0 Introduced.

WP_Customize_Nav_Menus::ajax_insert_auto_draft_post() code WP 6.6.2

public function ajax_insert_auto_draft_post() {
	if ( ! check_ajax_referer( 'customize-menus', 'customize-menus-nonce', false ) ) {
		wp_send_json_error( 'bad_nonce', 400 );
	}

	if ( ! current_user_can( 'customize' ) ) {
		wp_send_json_error( 'customize_not_allowed', 403 );
	}

	if ( empty( $_POST['params'] ) || ! is_array( $_POST['params'] ) ) {
		wp_send_json_error( 'missing_params', 400 );
	}

	$params         = wp_unslash( $_POST['params'] );
	$illegal_params = array_diff( array_keys( $params ), array( 'post_type', 'post_title' ) );
	if ( ! empty( $illegal_params ) ) {
		wp_send_json_error( 'illegal_params', 400 );
	}

	$params = array_merge(
		array(
			'post_type'  => '',
			'post_title' => '',
		),
		$params
	);

	if ( empty( $params['post_type'] ) || ! post_type_exists( $params['post_type'] ) ) {
		status_header( 400 );
		wp_send_json_error( 'missing_post_type_param' );
	}

	$post_type_object = get_post_type_object( $params['post_type'] );
	if ( ! current_user_can( $post_type_object->cap->create_posts ) || ! current_user_can( $post_type_object->cap->publish_posts ) ) {
		status_header( 403 );
		wp_send_json_error( 'insufficient_post_permissions' );
	}

	$params['post_title'] = trim( $params['post_title'] );
	if ( '' === $params['post_title'] ) {
		status_header( 400 );
		wp_send_json_error( 'missing_post_title' );
	}

	$r = $this->insert_auto_draft_post( $params );
	if ( is_wp_error( $r ) ) {
		$error = $r;
		if ( ! empty( $post_type_object->labels->singular_name ) ) {
			$singular_name = $post_type_object->labels->singular_name;
		} else {
			$singular_name = __( 'Post' );
		}

		$data = array(
			/* translators: 1: Post type name, 2: Error message. */
			'message' => sprintf( __( '%1$s could not be created: %2$s' ), $singular_name, $error->get_error_message() ),
		);
		wp_send_json_error( $data );
	} else {
		$post = $r;
		$data = array(
			'post_id' => $post->ID,
			'url'     => get_permalink( $post->ID ),
		);
		wp_send_json_success( $data );
	}
}