admin管理员组文章数量:1287514
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) ?>"
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) ?>"
Share
Improve this question
edited Nov 1, 2021 at 21:10
liquidRock
asked Oct 31, 2021 at 19:41
liquidRockliquidRock
2071 silver badge9 bronze badges
4
|
1 Answer
Reset to default 9Getting meta data from a WP_Post
object is already possible. Just write:
echo $post->your_meta_key;
This will call get_post_meta( $this->ID, $your_meta_key, true )
behind the scenes.
See the documentation and the source code for WP_Post
.
This works also with instances of WP_User
, but not with WP_Comment
as far as I know.
Don't forget to escape the output!
本文标签: wp queryIs there a way to extend WPquery so Custom Post Types can have properties
版权声明:本文标题:wp query - Is there a way to extend WP_query so Custom Post Types can have properties? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741241102a2363994.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
post_meta
is in a separate table, whereas the examples you cited are part of theposts
table, so when you retrieve a post, data likeid
andpost_parent
orguid
are returned in that row, but when retrievingpost_meta
you're using the ID to run a secondary DB call to a different table. I guess it could be done by writing a custom function, but I really don't see why that would be necessary. – Tony Djukic Commented Oct 31, 2021 at 19:49page
orpost
type etc, they're stored the same way and handled the same way ( except that posts have rewrite rules and templates for date archives ) – Tom J Nowell ♦ Commented Oct 31, 2021 at 20:09