Related post extra field display
-
Hello,
When a post uses a relationship, the title of the related post is displayed. My question is how it is possible to display some custom fields of the related post beside the main title?
Thank you.
-
Hi @msamavi
On the front-end or in your templates you can use anything.
But in the admin section you can only use native object fields like the title, date etc. Metadata will not work as this isn’t part of the query.
See the “Display Field in Selection List” option.
https://docs.pods.io/fields/relationship/Cheers, Jory
Thanks @keraweb for the reply.
This is being handled perfectly by Toolset, however as I have already many custom fields in ACF and Pods, I am looking for a way to resolve this using Pods. Any comments, please? (any code snippets or so?)
Hi @msamavi
Took a look at the code again (this was a while ago) and it seems it should support other fields as well.
Simply set the field name inDisplay Field in Selection Listand is should work.The only limitation here is that it will only support a single field, not multiple.
Cheers, Jory
Hi @keraweb
Thanks for the update!
I checked it and there is another limitation: the custom field should be created by Pods, right?I need actually multiple custom fields to be displayed
Hi @msamavi
Then I’m afraid this simply cannot be done trough the UI.
There is a filter
pods_form_ui_field_pick_ajaxwhich you can use to manually modify and override all data but I do need to warn for possible performance and stability issues.
This is considered advanced usage and will require PHP knowledge.Cheers, Jory
Hi @keraweb
Thanks again for your quick reply.
Can you please provide a simple example using the filter?Hi @msamavi,
I’ve not done this with
pods_form_ui_field_pick_ajax, but here is an example usingpods_field_pick_data:<?php add_filter( 'pods_field_pick_data', function( $data, $name, $value, $options, $pod, $id ){ $relationship_field_name = 'PUT_NAME_OF_THE_RELATIONSHIP_FIELD_HERE'; $post_type = 'PUT_NAME_OF_THE_POST_TYPE_EXTENDED_BY_PODS_HERE'; if ( false !== strpos( $name, $relationship_field_name ) ) { foreach( $data as $id => & $label ) { $pod = pods( $post_type, $id ); /** * @see https://www.php.net/manual/en/function.sprintf.php * * For non-pods fields, get_post_meta() can also be used: * @see https://developer.wordpress.org/reference/functions/get_post_meta/ */ $label = sprintf( '%d - %s - %s', $pod->field( 'id' ), $pod->field( 'name_of_a_custom_field' ), $pod->field( 'name_of_another_custom_field' ) ); } } return $data; }, 10, 6 );And since you’re in the context of the post title,
the_titlefilter might also be able to be used. Here is a similar example using the title, filtered to modify the admin display only. This would also affect the post listing page:<?php add_filter( 'the_title', function( $title, $id ) { if ( 'name-of-your-post-type' === get_post_type( $id ) ) { if ( is_admin() ) { return sprintf( '%d — %s — %s', $id, $title, get_post_meta( $id, 'name-of-your-custom-field', true ) ); } } return $title; }, 10, 2 );Thank you so much @pdclark !
I tried both of your snippets and they worked perfectly to get the Pods custom fields.
Just to get a non-Pods custom field, can you please do the last favour and give me an example?
Regards.
Please read the code comment in the first example, which says to use get_post_meta() for non-Pods fields, and links to the documentation. The second example uses this function.
I did use it with no success, now I found a typo in my code and all is working perfectly!
I will definitely stay with Pods for relationships 🙂
Much appreciated!
The topic ‘Related post extra field display’ is closed to new replies.