Home › Forums › General Issues › Custom Text Field Won't Output Shortcode Data
I’ve got a custom text field assigned to User Profiles which I’ve added unique shortcodes to but when I use the ACF shortcode in a page/post, nothing displays. I just want it to output the data generated by the shortcode, not the raw shortcode itself.
I’ve been a’ Googling and it looks like the ACF text field doesn’t work with shortcodes by default, but I can’t seem to find a solution that works. Any help would be appreciated!
Shortcodes do not run on text field, or any type of field, other than a wysiwyg field. In order to do this you need to create a filter. The acf/format_value documentation has en example that deals with what you’re looking for. https://www.advancedcustomfields.com/resources/acfformat_value/
I tried adding that code from the example to functions.php but it had no effect. Let me know you what I’ve got:
Custom field set to text area with the slug “shortcode_field”. It would be nice to filter just for that field rather than all textarea fields, but acf/load_value/name={$shortcode_field} doesn’t seem to be working, either.
Funtions.php:
function text_area_shortcode($value, $post_id, $field) {
if (is_admin()) {
// don't do this in the admin
// could have unintended side effects
return;
}
do_shortcode($value);
return $value;
}
add_filter('acf/load_value/type=textarea', 'text_area_shortcode', 10, 3);
Shortcode on page:
[acf field="shortcode_field"]
also tried:
[acf field="{$shortcode_field}"]
Appreciate your help!
not sure where you got load_value using the example I linked to it should be
add_filter('acf/format_value/type=textarea', 'text_area_shortcode', 10, 3);
I got that from another post and forgot to remove it. Changed it to your code but it still has no output.
You said this field is on a user profile. You’re going to need to supply the correct post id in the shortcode. In this case “user_1” where then number is the user ID.
see https://www.advancedcustomfields.com/resources/shortcode/ and get value from other places here https://www.advancedcustomfields.com/resources/get_field/
Each user profile will have a different shortcode set in the custom field. What would I need to do to accomplish that? Sorry, I’m not much of a programmer. I should have paid more attention in Pascal & C++ 🙂
I’m not completely sure what it is that you doing.
You have a textarea field on the user profile edit page.
In this textarea you put a shortcode for another ACF field.
Where is this ACF field? is the value on the same user profile page or somewhere else?
The ACF field I added appears in user profiles where they add a unique shortcode; it’s not an ACF shortcode, it’s for another plugin. I want to use an ACF shortcode on a page to display the output from the other shortcode that’s input into the ACF field in each user profile. Does that make sense?
You won’t be able to use the ACF shortcode. ACF shortcodes are meant for showing simple fields that are always the same. The ACF shortcode that you add to the page must have the field name and the post_id to use for the user. If the user ID is always the same then it will work but if you want it to be dynamic based on the user that’s logged in then the ACF shortcode will not work. You will need to build your own code the create a custom shortcode that will get the current users id and get the correct field and display it. I would suggest looking at https://codex.wordpress.org/Function_Reference/add_shortcode and https://codex.wordpress.org/Function_Reference/get_current_user_id
That depends on where you want it to appear. Most of the time when using shortcodes it because you’re putting them in the middle of content in the wysiwyg editor. If it will appear in a specific place, either before or after the content, then I would use PHP. On the other hand, if you need it to be in the middle of the content somewhere then building a shortcode is pretty much the only option.
If you can do it with simple php then this is all you should need and you can even remove the filter to run shortcodes on textarea fields.
echo do_shortcode(get_field('field_name', 'user_'.get_current_user_id()));
That did it, John! Thanks so much for your help. I’ll outline exactly what I did for anyone wanting to re-create this.
echo do_shortcode(get_field('field_name', 'user_'.get_current_user_id()));
The topic ‘Custom Text Field Won't Output Shortcode Data’ is closed to new replies.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.