I’ve created a custom post type. It will load just fine in the WordPress dashboard and I will be able to save it aswell. Now let’s say it’s a custom post type that contains data for a few strings and a few dates.
I want to be able to retrieve these custom post types (which i’ve done using WP_Query and specifying the post_type to the name of my custom post type). When i call print_r on the returned object, nowhere in the object is the custom data (strings and dates) stored. How would i retrieve these from the database?
I’ve looked around for hours and haven’t found any approach to retrieving this data.
As requested: This is how the data is stored:
function update_obituary(){
global $post;
update_post_meta($post->ID, "first_name", $_POST["first_name"]);
update_post_meta($post->ID, "last_name", $_POST["last_name"]);
update_post_meta($post->ID, "birth_date", $_POST["birth_date"]);
update_post_meta($post->ID, "death_date", $_POST["death_date"]);
update_post_meta($post->ID, "publication_date", $_POST["publication_date"]);
}
This function is tied to the ‘save_post’ hook. The data will be redisplayed when i reopen the custom post type instance in edit mode. That means that it’s stored in the database, right?
If the metadata shows up when editing posts of the type, then yes, it must have been successfully stored in the DB.
There’s two wp functions to retrieve the custom post type’s metadata:
get_post_custom_values
andget_post_meta
. The difference being, thatget_post_custom_values
can access non-unique custom fields, i.e. those with more than one value associated with a single key. You may choose to use it for unique fields also though – question of taste.Assuming, that your post type is called “obituary”:
A word of caution, to avoid confusion:
Leaving out the boolean in
get_post_meta
will make it return an array rather than a string.get_post_custom_values
always returns an array, which is why, in the above example, we’re echoing the$birth_date[0]
, rather than$birth_date
.Also I’m not 100% certain at the moment, whether
$post->ID
will work as expected in the above. If not, replace it withget_the_ID()
. Both should work, one will for sure. Could test that, but saving myself the time…For the sake of completeness, check the codex on
WP_Query
for more query arguments and correct usage.