Home / Admin / ACF Display Frontend (Opt Fields with prefix/suffix)
Duplicate Snippet

Embed Snippet on Your Site

ACF Display Frontend (Opt Fields with prefix/suffix)

<10
Code Preview
php
<?php
/**
 * WLM712: Safe ACF Options getter with prefix/suffix (+ shortcode).
 * Shortcode: [wlm712_acfopt field="..." prefix="..." suffix="..." esc="html|attr|url|none"]
 * Example:   [wlm712_acfopt field="contact_phone_number" prefix='<a href="tel:{value}">' suffix='</a>']
 */
if (!defined('WLM712_ACFOPT_VER')) {
  define('WLM712_ACFOPT_VER', '1.0.0');
  add_action('init', function () {
    // Only run if ACF is available
    if (!function_exists('get_field')) return;
    // Core getter (unique name)
    if (!function_exists('wlm712_acfopt_get')) {
      function wlm712_acfopt_get($field, $prefix = '', $suffix = '', $esc = 'html') {
        if (!$field) return '';
        $v = get_field($field, 'option');
        if ($v === null || $v === false || $v === '') return '';
        // Normalize structured returns (Link/Image/Select)
        if (is_array($v)) {
          if (isset($v['url']))        $v = $v['url'];
          elseif (isset($v['value']))  $v = $v['value'];
          elseif (isset($v['email']))  $v = $v['email'];
          else                         $v = wp_json_encode($v);
        }
        $v = trim((string) $v);
        // Escape the VALUE only (keep prefix/suffix raw for HTML)
        switch (strtolower($esc)) {
          case 'attr': $v = esc_attr($v); break;
          case 'url':  $v = esc_url($v);  break;
          case 'none':
          case 'raw':  /* no escape */    break;
          default:     $v = esc_html($v);
        }
        // Support {value} placeholder so Elementor can build full tags
        return str_replace('{value}', $v, $prefix . '{value}' . $suffix);
      }
    }
    // Register shortcode under a unique tag; do not override if present
    if (!shortcode_exists('wlm712_acfopt')) {
      add_shortcode('wlm712_acfopt', function ($atts) {
        $a = shortcode_atts([
          'field'  => '',
          'prefix' => '',
          'suffix' => '',
          'esc'    => 'html', // html|attr|url|none
        ], $atts, 'wlm712_acfopt');
        return $a['field']
          ? wlm712_acfopt_get($a['field'], $a['prefix'], $a['suffix'], $a['esc'])
          : '';
      });
    }
  }, 11); // after most plugins init
}

Comments

Add a Comment