Support Forum
Hi Anh,
I'm having a hard time understanding the best route to take for what I'm needing. I need to allow the user to upload a pdf and also give that pdf file a specific name to display on the front end. So the end result would need to look like this: https://d.pr/free/i/Rcyngm
I'm currently using the "file advanced" upload field for the pdf. But when I use the shortcode [rwmb_meta id="monthly_pdf_calendar"] it shows as an unordered bullet point and displays the filename like this: https://d.pr/free/i/7SCqtA
Lastly slightly related - Since I couldn't figure out how to best do the above. I tried a different approach. I have a custom visual composer button module that allows me to pull in the link value of a custom meta field. I just add in the custom fields ID and it pulls in the value. But in this case the value it pulled in is "2931". See screenshot example: https://d.pr/free/i/klZ1MU
This didn't work as the value needs to be the full link path to the pdf. How can the full link path be added to the value as opposed to the "2931". Also what is the "2931" saying?
Thanks in advance!
Hi Brian,
Solution 1: adding a text field for file name.
You can do that by adding a text field into your meta box, or wrap the file_advanced
and text
field into a group, whatever convenient for you.
Then outputting the file using code like below (this is for the case when the file and the text field are not in a group):
$file = rwmb_meta( 'my_file' );
$file = empty( $file ) ? null : reset( $file ); // Just get the first file.
$title = rwmb_meta( 'my_file_title' );
if ( is_array( $file ) ) {
echo "<a href='{$file['url']}'>{$title}</a>";
}
If they're in a group, then you can do like this:
$group = rwmb_meta( 'my_file_group' );
$file_ids = isset( $group['file'] ) ? $group['file'] : null;
$file_id = empty( $file_ids ) ? null : reset( $file_id );
$file = RWMB_File_Field::file_info( $file_id );
$title = isset( $group['title'] ) ? $group['title'] : '';
if ( is_array( $file ) ) {
echo "<a href='{$file['url']}'>{$title}</a>";
}
Solution 2: using a page builder
If you use a page builder, like VC or Beaver Builder, you need to fetch the data of the file to use in the plugin. Meta Box stores attachment ID, not file URL.
A quick solution for that is writing a shortcode to get file URL from the field, like this:
add_shortcode( 'your_file_url', function( $atts ) {
$file = rwmb_meta( 'my_file' );
$file = empty( $file ) ? null : reset( $file );
return empty( $file ) ? '' : wp_get_attachment_url( $file );
} );
And use shortcode [your_file_url]
in your page builder module to get the file URL.
Hi Anh,
Thanks for the detailed reply! Ok slowly learning. For the first two snippets you provided. I'm not using a template file. I'd like to incorporate it into a shortcode in my functions.php file and then just use the shortcode to output those added values? Is that possible / what would that look like?
For the second solution. This didn't work for me. I'll touch base with theme author to see if that field accepts shortcodes.
But I also tried adding this to the page manually like this to test:
<a href="[your_file_url]">MY TEXT</a>
But the link it generated was for the exact same page I was on. Not the pdf link? Not sure what went wrong there.
Thoughts - Thanks!
Hi Brian,
Thanks for the detailed reply! Ok slowly learning. For the first two snippets you provided. I’m not using a template file. I’d like to incorporate it into a shortcode in my functions.php file and then just use the shortcode to output those added values? Is that possible / what would that look like?
Yes, of course. Here is the modified code for the 1st snippet:
add_shortcode( 'your_shortcode', function( $atts ) {
$output = '';
$file = rwmb_meta( 'my_file' );
$file = empty( $file ) ? null : reset( $file ); // Just get the first file.
$title = rwmb_meta( 'my_file_title' );
if ( is_array( $file ) ) {
$output .= "<a href='{$file['url']}'>{$title}</a>";
}
return $output;
} );
But the link it generated was for the exact same page I was on. Not the pdf link? Not sure what went wrong there.
Can you check if the current page has PDF file in the my_file
field?
Hi Anh,
Thanks for the reply. Ok I've changed the meta box into a group. At first the code didn't work - but I added an "s" to reset( $file_id );
and it seem to work just fine.
add_shortcode( 'group_monthly_calendar', function( $atts ) {
$output = '';
$group = rwmb_meta( 'group_cal_pdf' );
$file_ids = isset( $group['cal_pdf'] ) ? $group['cal_pdf'] : null;
$file_id = empty( $file_ids ) ? null : reset( $file_ids );
$file = RWMB_File_Field::file_info( $file_id );
$title = isset( $group['cal_title'] ) ? $group['cal_title'] : '';
if ( is_array( $file ) ) {
$output .= "<a href='{$file['url']}' target='_blank'>{$title}</a>";
}
return $output;
} );
[rwmb_meta id="field_id"]
and it works. What do you do for grouped field values? Also your shortcode doc could really use an update / give a few more working examples.
Thanks in advance!
Hi Brian,
- Was that correct to do?
Yes! Sorry, my mistake. I missed the "s".
- How do you use Meta Box shortcodes to output group fields?
The shortcode only outputs list of data of sub-fields in a group. I'd not recommend using it for groups. Instead, write your own shortcode, like what you did with group_monthly_calendar
shortcode.
- Yes it was in the field. But now since I changed it to be in a group I don’t know what the ID would be to test again.
As you need to get the PDF file URL, try modifying your shortcode to this:
add_shortcode( 'group_monthly_calendar_pdf_url', function( $atts ) {
$output = '';
$group = rwmb_meta( 'group_cal_pdf' );
$file_ids = isset( $group['cal_pdf'] ) ? $group['cal_pdf'] : null;
$file_id = empty( $file_ids ) ? null : reset( $file_ids );
$file = RWMB_File_Field::file_info( $file_id );
if ( is_array( $file ) ) {
return $file['url'];
}
return '';
} );
- Are you having issues saving settings in the Group Field in Meta Box Builder?
I see. Thanks a lot for your video. I'll check and fix it.
- File Advanced showing “max number of files” even though I did not select the “show status” check box.
Thanks. Let me check and fix it.
- If you remove the “Label” for the Group field – but then you add a “Group title text” it seems like that should then show up where the normal “Label” field showed. Currently all my “group” fields are blank. See the above video link.
I see. Thanks a lot for your video. I'll check and fix it.