meta_form( WP_Post $post = null )

Prints the form in the Custom Fields meta box.

Parameters

$postWP_Postoptional
The post being edited.

Default:null

Source

function meta_form( $post = null ) {	global $wpdb;	$post = get_post( $post );	/** * Filters values for the meta key dropdown in the Custom Fields meta box. * * Returning a non-null value will effectively short-circuit and avoid a * potentially expensive query against postmeta. * * @since 4.4.0 * * @param array|null $keys Pre-defined meta keys to be used in place of a postmeta query. Default null. * @param WP_Post $post The current post object. */	$keys = apply_filters( 'postmeta_form_keys', null, $post );	if ( null === $keys ) {	/** * Filters the number of custom fields to retrieve for the drop-down * in the Custom Fields meta box. * * @since 2.1.0 * * @param int $limit Number of custom fields to retrieve. Default 30. */	$limit = apply_filters( 'postmeta_form_limit', 30 );	$keys = $wpdb->get_col(	$wpdb->prepare(	"SELECT DISTINCT meta_key	FROM $wpdb->postmeta	WHERE meta_key NOT BETWEEN '_' AND '_z'	HAVING meta_key NOT LIKE %s	ORDER BY meta_key	LIMIT %d",	$wpdb->esc_like( '_' ) . '%',	$limit	)	);	}	if ( $keys ) {	natcasesort( $keys );	}	?> <p><strong><?php _e( 'Add Custom Field:' ); ?></strong></p> <table id="newmeta"> <thead> <tr> <th class="left"><label for="metakeyselect"><?php _ex( 'Name', 'meta name' ); ?></label></th> <th><label for="metavalue"><?php _e( 'Value' ); ?></label></th> </tr> </thead> <tbody> <tr> <td id="newmetaleft" class="left">	<?php if ( $keys ) { ?> <select id="metakeyselect" name="metakeyselect"> <option value="#NONE#"><?php _e( '&mdash; Select &mdash;' ); ?></option>	<?php	foreach ( $keys as $key ) {	if ( is_protected_meta( $key, 'post' ) || ! current_user_can( 'add_post_meta', $post->ID, $key ) ) {	continue;	}	echo "\n<option value='" . esc_attr( $key ) . "'>" . esc_html( $key ) . '</option>';	}	?> </select> <input class="hidden" type="text" id="metakeyinput" name="metakeyinput" value="" aria-label="<?php _e( 'New custom field name' ); ?>" /> <button type="button" id="newmeta-button" class="button button-small hide-if-no-js" onclick="jQuery('#metakeyinput, #metakeyselect, #enternew, #cancelnew').toggleClass('hidden');jQuery('#metakeyinput, #metakeyselect').filter(':visible').trigger('focus');"> <span id="enternew"><?php _e( 'Enter new' ); ?></span> <span id="cancelnew" class="hidden"><?php _e( 'Cancel' ); ?></span></button> <?php } else { ?> <input type="text" id="metakeyinput" name="metakeyinput" value="" /> <?php } ?> </td> <td><textarea id="metavalue" name="metavalue" rows="2" cols="25"></textarea>	<?php wp_nonce_field( 'add-meta', '_ajax_nonce-add-meta', false ); ?> </td> </tr> </tbody> </table> <div class="submit add-custom-field">	<?php	submit_button(	__( 'Add Custom Field' ),	'',	'addmeta',	false,	array(	'id' => 'newmeta-submit',	'data-wp-lists' => 'add:the-list:newmeta',	)	);	?> </div>	<?php } 

Hooks

apply_filters( ‘postmeta_form_keys’, array|null $keys, WP_Post $post )

Filters values for the meta key dropdown in the Custom Fields meta box.

apply_filters( ‘postmeta_form_limit’, int $limit )

Filters the number of custom fields to retrieve for the drop-down in the Custom Fields meta box.

Changelog

VersionDescription
1.2.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    Note that if your setup uses a lot of metafields, the custom field metabox provided by default by WordPress triggers a very slow mysql query that can slow down the Edit Post page load time (info: https://core.trac.wordpress.org/ticket/33885). Here is an easy fix (add it to your Theme’s functions.php file):

    function admin_speedup_remove_post_meta_box() { global $post_type; if ( is_admin() && post_type_supports( $post_type, 'custom-fields' ) ) { remove_meta_box( 'postcustom', 'post', 'normal' ); } } add_action( 'add_meta_boxes', 'admin_speedup_remove_post_meta_box' );

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