metadata_exists( string $meta_type, int $object_id, string $meta_key ): bool
- Since
- 3.3.0
- Source
wp-includes/meta.php:749
Parameters
$meta_typestring- Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user', or any other object type with an associated meta table.
$object_idint- ID of the object metadata is for.
$meta_keystring- Metadata key.
Return
bool- Whether a meta field with the given key exists.
Cost profile
Measured from the compiled opcodes, not from a stopwatch. Every number here is identical on any machine that runs the same PHP version, and every function in core is ranked by these figures.
- Cost class
- Light
- Scaling
- Constant
- Instructions
- 5–43
- Plugin surface
- 1 hook
- Called by
- 4
Only touches the object cache, via wp_cache_get().
No loop in the body: the same number of instructions runs whatever you pass in.
Executed per call on PHP 8.4, depending on the branch taken. The body compiles to 48.
Third-party callbacks on 'get_{$meta_type}_metadata' run inside this call, and their cost is not bounded by anything here.
4 places in core call this, so the cost is paid more often than your own code shows.
What it touches
- hookthird-party callbacks
apply_filters()called directly - cacheobject cache
wp_cache_get()called directly
What one call costs · 4 distinct outcomes
One number would be a lie: the work depends on which branch runs. These are every distinct cost metadata_exists() can have, taken from its control-flow graph on PHP 8.4.
| When | Instructions | Calls it makes |
|---|---|---|
| always | 5–7 | none |
$object_id | 12 | absint() |
$object_id && $check !== null | 27 | absint()apply_filters() |
$object_id && $check === null | 35–43 | absint()apply_filters()wp_cache_get() |
Across PHP versions
| PHP | Compiled | Executed | Branches | Notes |
|---|---|---|---|---|
7.4 | 50 | 5–45 | 6 | More instructions than PHP 8.4 |
8.1 | 50 | 5–45 | 6 | More instructions than PHP 8.4 |
8.2 | 50 | 5–45 | 6 | More instructions than PHP 8.4 |
8.3 | 50 | 5–45 | 6 | More instructions than PHP 8.4 |
8.4 | 48 | 5–43 | 6 | Compiles to the same instructions |
Oldest PHP that compiles this body: 7.4. An instruction is not a fixed amount of time, so a version with the same count is not necessarily the same speed; what the count rules out is a difference in the work itself.
Hooks fired · 1
One hook fires while metadata_exists() runs, in this order:
- apply_filters( get_{$meta_type}_metadata )filterline 760 (+11 into the body)
Short-circuits the return value of a meta field.
Uses · 4
- absint()Converts a value to non-negative integer.
- apply_filters()Calls the callback functions that have been added to a filter hook.
- wp_cache_get()Retrieves the cache contents from the cache by key and group.
- update_meta_cache()Updates the metadata cache for the specified objects.
Used by · 4
- WP_Post::__isset()Isset-er.
- WP_User::__isset()Magic method for checking the existence of a certain custom field.
- wp_install_defaults()Creates the initial content for a newly-installed site.
- wp_save_revisioned_meta_fields()Save the revisioned meta fields.
Source
function metadata_exists( $meta_type, $object_id, $meta_key ) { if ( ! $meta_type || ! is_numeric( $object_id ) ) { return false; } $object_id = absint( $object_id ); if ( ! $object_id ) { return false; } /** This filter is documented in wp-includes/meta.php */ $check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, true, $meta_type ); if ( null !== $check ) { return (bool) $check; } $meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' ); if ( ! $meta_cache ) { $meta_cache = update_meta_cache( $meta_type, array( $object_id ) ); $meta_cache = $meta_cache[ $object_id ]; } if ( isset( $meta_cache[ $meta_key ] ) ) { return true; } return false;}History
Introduced in 3.3.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
About this page
- Parsed data
- Generated from the wordpress-develop 6.8.8 tag, from
src/wp-includes/meta.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it. - Corrections
- Something wrong on this page? Report it and it gets fixed in the next regeneration.