wp-admin/includes/template.php:694Prints the form in the Custom Fields meta box.
$postWP_Postoptionalnull2 hooks fire while meta_form() runs, in this order:
Filters values for the meta key dropdown in the Custom Fields meta box.
Filters the number of custom fields to retrieve for the drop-down in the Custom Fields meta box.
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( '— Select —' ); ?></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 ); ?>Introduced in 1.2.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-admin/includes/template.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.