Using WordPress ‘get_meta_keys()’ PHP function

The get_meta_keys() WordPress PHP function retrieves a list of all previously defined meta keys for a specific post type.

Usage

$all_meta_keys = get_meta_keys();

Parameters

  • None

More information

See WordPress Developer Resources: get_meta_keys()

Examples

Display all meta keys for a custom post type

Retrieve all the meta keys for a custom post type called ‘books’, and display them in a list.

// Get all meta keys for the 'books' post type
$args = array('post_type' => 'books', 'numberposts' => -1);
$books = get_posts($args);
$meta_keys = array();
foreach ($books as $book) {
    $keys = get_post_custom_keys($book->ID);
    if (!empty($keys)) {
        foreach ($keys as $key) {
            if (!in_array($key, $meta_keys)) {
                $meta_keys[] = $key;
            }
        }
    }
}

// Display the meta keys in a list
echo "<ul>";
foreach ($meta_keys as $key) {
    echo "<li>" . $key . "</li>";
}
echo "</ul>";

Filter posts by meta key

Filter and display posts with a specific meta key called ‘publisher’.

$meta_key = 'publisher';
$args = array(
    'meta_key' => $meta_key,
    'posts_per_page' => -1
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo "<h2>" . get_the_title() . "</h2>";
    }
} else {
    echo "No posts found with the meta key 'publisher'.";
}

Count posts with a specific meta key

Count the number of posts with the ‘publisher’ meta key.

$meta_key = 'publisher';
$args = array(
    'meta_key' => $meta_key,
    'posts_per_page' => -1
);
$query = new WP_Query($args);

echo "Number of posts with the 'publisher' meta key: " . $query->post_count;

Display unique values of a specific meta key

Retrieve and display the unique values of the ‘publisher’ meta key.

$meta_key = 'publisher';
$unique_values = array();

$args = array(
    'meta_key' => $meta_key,
    'posts_per_page' => -1
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $value = get_post_meta(get_the_ID(), $meta_key, true);
        if (!in_array($value, $unique_values)) {
            $unique_values[] = $value;
        }
    }
    echo "Unique values for the 'publisher' meta key:<br>";
    echo implode(', ', $unique_values);
} else {
    echo "No posts found with the meta key 'publisher'.";
}