Is there a way to extend WP_query so Custom Post Types can have properties?
Having trouble finding info on this. When working with lots of metadata/custom fields, I would really prefer to simplify getting the meta data inside of templates instead of using get_post_meta
and instead keep the setting up of that data in the back-end where it belongs to keep my templates clean and easier to work with.
Is there a way to do this?
p?php echo $something-meta_field_name ?/p
This would be similar to how you can do things like $post-ID
or $post-post_parent
that are in WordPress core, except it would be for custom post types and custom fields. If this is not possible, I guess the next question would be, why?
Edit: Since I've seen this mentioned several times in responses, when writing PHP like this you have to escape the output, which I do. I left out the escaping for brevity, but for anyone new to it, here's how I would typically write this (and thanks to @fuxia for the solution to my original question).
Escaping (with the solution) for WordPress:
p id=text-?php echo esc_attr($post-post_name) ??php echo esc_html($post-meta_key_name) ?/p
And if you're outputting to a class:
p class=text-?php echo sanitize_html_class($post-post_title) ?Clean Class/p
I typically wouldn't use post_title
but using it as an example as sanitize_html_class
will remove white space and only keep alphanumeric characters, underscores and dashes.
If outputting things like JSON-LD, you can combine escaping:
@id: ?php echo esc_js(esc_url($link)) ?#?php echo esc_js($post-post_name) ?,
name: ?php echo esc_js($post-post_title) ?