Support

Account

Home Forums General Issues Custom Text Field Won't Output Shortcode Data

Solved

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.

  • 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

  • What about a PHP snippet added to the page template?

  • 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.

    1. Add a custom field in ACF. Set it to “Text” and assign the location to “User” “is equal to” “All” if you want it to appear in the user profile.
    2. Add your custom shortcode in the field in the user profile(s).
    3. Install the Insert PHP Code Snippet Plugin and add the snippet with the code example as follows, being sure to change ‘field_name’ to your ACF slug:
      echo do_shortcode(get_field('field_name', 'user_'.get_current_user_id()));
      
    4. Insert your PHP Code Snippet shortcode into your content as desired.
Viewing 14 posts - 1 through 14 (of 14 total)

You must be logged in to reply to this topic.