Support

Account

Home Forums Search Search Results for 'remove comma'

Search Results for 'remove comma'

topic

  • Solved

    Remove Last Comma

    Hello,
    I am creating a slideshow gallery, and as you can see in the code below I am pulling first image from gallery for the src and then the rest of the images for data-slide.

    <? $images = get_field('rec_gallery'); if( $images ): ?>
    	<img class="GalleryImg"
    	alt="<?php the_title(); ?>"
            src="<?php if( $images ): $image_1 = $images[0]; ?> <?php echo $images[0]['sizes']['large']; ?> <?php endif; ?>"
             data-slide="<?php $skip = true; if( $images ): foreach( $images as $image ): if ($skip) { $skip = false; continue; } echo $image ['sizes']['large'],','; endforeach; endif; ?>"/>
    <?php endif; ?>

    I need to separate the links I get for the images in data-slide with comma. The trouble I am having is that I end up with comma on the end of the last link.

    <img class="headerImg"
    	alt="Venison Sausage"
            src=" https://site.m/2018/04/25194824/stranger.jpg "
            data-slideshow="https://site.m/2018/04/29190427/DSC_5519-1024x683.jpg,https://site.m/2018/04/29190458/Confirming-Studies-1-1024x683.jpg,https://site.m/2018/04/29190502/Cunningly-Fomenting-1024x683.jpg,https://site.m/2018/04/29190505/Do-You-Like-Butter.jpg,"/>

    I can’t have the comma on the end because then I end up with one empty slide.

    Any ideas how to remove the last comma?

    Thanks.

  • Solving

    Not saving Frontend and Backend

    I am using A custom Post Type with Advanced Custom Fields to create custom entries of a post. My Customs Post Type and Options are added with:

    add_action( 'init', 'register_cpt_campaigns' );
    
    function register_cpt_campaigns() {
    
    $labels = array(
        'name' => __( 'Campaigns', 'campaigns' ),
        'singular_name' => __( 'campaign', 'campaigns' ),
        'add_new' => __( 'Add New', 'campaigns' ),
        'add_new_item' => __( 'Add New Campaign', 'campaigns' ),
        'edit_item' => __( 'Edit Campaign', 'campaigns' ),
        'new_item' => __( 'New Campaign', 'campaigns' ),
        'view_item' => __( 'View Campaign', 'campaigns' ),
        'search_items' => __( 'Search Campaigns', 'campaigns' ),
        'not_found' => __( 'Campaign not found', 'campaigns' ),
        'not_found_in_trash' => __( 'Campaign not found', 'campaigns' ),
        'parent_item_colon' => __( 'Parent campaign:', 'campaigns' ),
        'menu_name' => __( 'Campaigns', 'campaigns' ),
    );
    
    $args = array(
        'labels' => $labels,
        'hierarchical' => false,
        'description' => 'Custom post type for Discovr Campaigns',
        'supports' => array( 'author','title' ),
        'taxonomies' => array( 'campaign_category', 'campaign_action' ),
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-welcome-widgets-menus',
        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'has_archive' => false,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => true,
        'capability_type' => 'post'
    );
    
    register_post_type( 'campaigns', $args );
    }

    And custom Taxonomies with:

    // Register Campaign Type Taxonomy
    function campaign_post_category() {
    
    $labels = array(
        'name'                       => _x( 'Campaign Types', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Campaign Type', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Campaign Types', 'text_domain' ),
        'all_items'                  => __( 'All types', 'text_domain' ),
        'parent_item'                => __( 'Parent types', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent types:', 'text_domain' ),
        'new_item_name'              => __( 'New Campaign Type', 'text_domain' ),
        'add_new_item'               => __( 'Add New Campaign Type', 'text_domain' ),
        'edit_item'                  => __( 'Edit Campaign Type', 'text_domain' ),
        'update_item'                => __( 'Update Campaign Type', 'text_domain' ),
        'view_item'                  => __( 'View Campaign Type', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate campaign types with commas', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove campaign types', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used', 'text_domain' ),
        'popular_items'              => __( 'Popular campaign types', 'text_domain' ),
        'search_items'               => __( 'Search campaign type', 'text_domain' ),
        'not_found'                  => __( 'Not Found', 'text_domain' ),
        'no_terms'                   => __( 'No campaign types', 'text_domain' ),
        'items_list'                 => __( 'Campaign type list', 'text_domain' ),
        'items_list_navigation'      => __( 'Campaign type list navigation', 'text_domain' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => false,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => false,
        'show_tagcloud'              => false,
    );
    register_taxonomy( 'campaign_category', array( 'campaign_categories' ), $args );
    
    }
    add_action( 'init', 'campaign_post_category', 0 );
    
    // Register Campaign Status Taxonomy
    function campaign_post_action() {
    
    $labels = array(
        'name'                       => _x( 'Campaign Status', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Campaign Status', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Campaign Status', 'text_domain' ),
        'all_items'                  => __( 'All Status', 'text_domain' ),
        'parent_item'                => __( 'Parent Status', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Status:', 'text_domain' ),
        'new_item_name'              => __( 'New Campaign Status', 'text_domain' ),
        'add_new_item'               => __( 'Add New Campaign Status', 'text_domain' ),
        'edit_item'                  => __( 'Edit Campaign Status', 'text_domain' ),
        'update_item'                => __( 'Update Campaign Status', 'text_domain' ),
        'view_item'                  => __( 'View Campaign Status', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate campaign status with commas', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove campaign status', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used', 'text_domain' ),
        'popular_items'              => __( 'Popular campaign status', 'text_domain' ),
        'search_items'               => __( 'Search campaign status', 'text_domain' ),
        'not_found'                  => __( 'Not Found', 'text_domain' ),
        'no_terms'                   => __( 'No campaign status', 'text_domain' ),
        'items_list'                 => __( 'campaign status list', 'text_domain' ),
        'items_list_navigation'      => __( 'campaign status list navigation', 'text_domain' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => false,
        'public'                     => true,
        'show_ui'                    => false,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => false,
        'show_tagcloud'              => false,
    );
    register_taxonomy( 'campaign_action', array( 'campaign_actions' ), $args );
    
    }
    
    add_action( 'init', 'campaign_post_action', 0 );

    I also have some functions that are added to the theme to support my functionality of the post-type. I have removed these to rectify my issue but did not fix anything.

    // Add Default Campaign Status
    function set_default_campaign_status( $post_id, $post ) {
        if ( 'publish' === $post->post_status && $post->post_type === 'campaigns' ) {
            $defaults = array(
                'campaign_action' => array( 'Draft' )
                );
            $taxonomies = get_object_taxonomies( $post->post_type );
            foreach ( (array) $taxonomies as $taxonomy ) {
                $terms = wp_get_post_terms( $post_id, $taxonomy );
                if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
                    wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
                }
            }
        }
    }
    add_action( 'save_post', 'set_default_campaign_status', 0, 2 );
    
    // Add Default Campaign Type
    
    function set_default_campaign_type( $post_id, $post ) {
        if ( 'publish' === $post->post_status && $post->post_type === 'campaigns' ) {
            $defaults = array(
                'campaign_category' => array( 'Not Selected' )
                );
            $taxonomies = get_object_taxonomies( $post->post_type );
            foreach ( (array) $taxonomies as $taxonomy ) {
                $terms = wp_get_post_terms( $post_id, $taxonomy );
                if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
                    wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
                }
            }
        }
    }
    add_action( 'save_post', 'set_default_campaign_type', 0, 2 );
    
    // Delete post
    
    function delete_post(){
    global $post;
    $deletepostlink= add_query_arg( 'frontend', 'true', get_delete_post_link( get_the_ID() ) );
    if (current_user_can('edit_post', $post->ID)) {
        echo       '<a href="'.$deletepostlink.'" id=""><button class="m-t-10 m-b-10 btn btn-danger btn-cons"  type="button">Delete</button></a>';
    }
    }
    
    //Redirect after delete post in frontend
    
    add_action('trashed_post','trash_redirection_frontend');
    
    function trash_redirection_frontend($post_id) {
    if ( filter_input( INPUT_GET, 'frontend', FILTER_VALIDATE_BOOLEAN ) ) {
        wp_redirect( get_option('siteurl').'/campaigns' );
        exit;
    }
    }
    // Add default Campaign Pages
    function discovr_campaign_endpoints() {
    add_rewrite_endpoint( 'overview', EP_PERMALINK );
        add_rewrite_endpoint( 'new-campaign-details', EP_PERMALINK );
        add_rewrite_endpoint( 'new-campaign-audience', EP_PERMALINK );
        add_rewrite_endpoint( 'new-campaign-page', EP_PERMALINK );
        add_rewrite_endpoint( 'new-campaign-ads', EP_PERMALINK );
    add_rewrite_endpoint( 'edit-campaign', EP_PERMALINK );
    add_rewrite_endpoint( 'analytics', EP_PERMALINK );
    }
    add_action( 'init', 'discovr_campaign_endpoints' );
    
    // Update Campaign Page on Save
    add_action( 'save_post', 'wpse105926_save_post_callback' );
    
    function wpse105926_save_post_callback( $post_id ) {
    // verify post is not a revision
    if ( ! wp_is_post_revision( $post_id ) ) {
    
        // unhook this function to prevent infinite looping
        remove_action( 'save_post', 'wpse105926_save_post_callback' );
    
        // update the post slug
        wp_update_post( array(
            'ID' => $post_id,
            'post_name' => '' // do your thing here
        ));
    
        // re-hook this function
        add_action( 'save_post', 'wpse105926_save_post_callback' );
    
    }
    }
    // Add Campaign Title Label and Instuctions
    function my_acf_prepare_field( $field ) {
    
    $field['label'] = "Campaign Title";
    $field['instructions'] = "Internal use only. Ex: <code>Retarget Abandoned Bookings</code>";
    
    return $field;
    
    }
    add_filter('acf/prepare_field/name=_post_title', 'my_acf_prepare_field');

    Unfortunately, every time I save a custom field it reverts to empty or as it’s original. This only happens with the ACF fields and not with fields such as title, author or taxonomies not overwritten with ACF. Please see the following gif images to understand further.

    Backend of WordPress with Post being created and updated
    null

    ACF Custom Fields Group Settings

    Frontend Post being created

    I have tried removing all frontend funtionality but still doesn’t work in the backend, also removed all plugins either than ACF. No error in debug or firebug. I can only imaging that there is a conflict in the fields, or ACF is not able to find the appropriate place to save these.

    Any help is greatly appreciated and I hope that there is something simple that I have missed.

    UPDATE
    This works by changing the field_name and field_label to something obscure.

    ACF Field Group working

    Frontend form saving

  • Solved

    Remove Trailing Comma in Repeater Field Output

    Hello Everyone, I have a repeater field called services, which has a sub field called service name, which is a post object.

    I use the while loop to echo out the service name separated by commas, but I have a trailing comma at the end that looks awful.

    I have looked around for an answer with no luck. Does anyone have an idea.

    here is the code:

    if( have_rows('services') ):
    
    while ( have_rows('services') ) : the_row();
    
    $service_name = get_sub_field('service_name');
    
    echo $service_name . ', ';
    
    endwhile; endif;
  • Solved

    Taxonomy not saving on Attachment

    Hello,
    I have added some taxonomies to the attachment post type.

    Example:

    $labels = array(
        'name' => _x( 'Styles', 'taxonomy general name' ),
        'singular_name' => _x( 'Styles', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Interiors ' ),
        'popular_items' => __( 'Popular Interiors ' ),
        'all_items' => __( 'All Styles' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Styles' ), 
        'update_item' => __( 'Update Styles Type' ),
        'add_new_item' => __( 'Add New Styles Type' ),
        'new_item_name' => __( 'New Styles Type Name' ),
        'separate_items_with_commas' => __( 'Separate Styles Types with commas' ),
        'add_or_remove_items' => __( 'Add or remove Styles Types' ),
        'choose_from_most_used' => __( 'Choose from the most used Styles' ),
        'menu_name' => __( 'Styles Types' ),
      ); 
    
    	// create a new taxonomy
    	register_taxonomy(
    		'style_types',
    		array("attachment"),
    		
    		
    		array(
    		"hierarchical" => true, 
    			'labels' =>$labels,
    			'sort' => true,
    			'args' => array( 'orderby' => 'term_order' ),
    			'rewrite' => array( 'slug' => 'style' ),
    			'show_admin_column' => 'true'
    		)
    	);

    Pretty standard. They show up fine when editing an image. Check boxes etc

    The issue is WordPress taxonomy management is pretty bad when it comes to uploaded a new image. I was thinking of using the ACF taxonomy field to edit the images once uploaded and added to the Gallery. Your implementation of multi-select is elegant and very user friendly. Theirs is fill in a text field with the slug….

    The issue is the ACF taxonomy field fights with the built in one and does not save. Guessing WP taxonomy save has a higher priority.

    Example 1:
    Go to a post that has a ACF Gallery > Click add to gallery
    Upload the image and use the ACF taxonomy field to add in the taxonomy you want
    Click update

    Taxonomy is not saved.

    Example 2:

    Go to Media Library
    Click on an image
    If you select the taxonomy with the built in check boxes it saves.
    Using ACF does not save.

    Example 3:
    Go to post with gallery
    Click on an existing image. Only the ACF taxonomy shows up, select the taxonomy and update. Works great.

    For small amounts of images this is not a problem. But the final site will have 20-30 per post and want to eliminate double clicking every image and also minimize user error.

    Is there any way to use the taxonomy field if the taxonomy is already on the post?

    Setup of the ACF 5.3.0 Pro fields:
    Posts: Gallery Field. Standard setup

    Images: Taxonomy Field called Styles
    Taxonomy Styles is selected
    Appearance: Multiselect

    Allow Null: No
    Create Terms: no
    Save Terms: Yes
    Load Terms: Yes
    Return Value: Term Object
    Conditional Logic: No

    For location: Attachment is equal to All

  • Solved

    Multiple Select Field – remove commas from output

    Hi, I am using a Multiple select field to see what classes to apply to an image.

    Anyways, in the back end, say I have these items selected:

    • classroom
    • Performance
    • Culture

    The Output I get is
    Classroom, Performance, Culture

    how do I remove the commas from the output?

  • Solved

    Google Map Field Not Working in Post Edit

    Hello all,

    So I’m having an issue where the google maps edit are in the post edit page isn’t showing the map, and I’m not able to change previously entered locations or add new ones to new posts.

    The previously entered in locations do display in the location area, howerver the map doesn’t display below.

    Front End is working as Expected.

    I do get an error listed as “uncaught TypeError: google.load is not a function”

    on http://www.north-star.ca/wp-content/plugins/advanced-custom-fields/js/input.min.js?ver=4.4.2:1 as follows :

    var acf={ajaxurl:"",admin_url:"",wp_version:"",post_id:0,nonce:"",l10n:null,o:null,helpers:{get_atts:null,version_compare:null,uniqid:null,sortable:null,add_message:null,is_clone_field:null,url_to_object:null},validation:null,conditional_logic:null,media:null,fields:{date_picker:null,color_picker:null,Image:null,file:null,wysiwyg:null,gallery:null,relationship:null}};!function($){acf.helpers.isset=function(){var e=arguments,t=e.length,a=null,n;if(0===t)throw new Error("Empty isset");for(a=e[0],i=1;i<t;i++){if(e[i]===n||a[e[i]]===n)return!1;a=a[e[i]]}return!0},acf.helpers.get_atts=function(e){var t={};return $.each(e[0].attributes,function(e,i){"data-"==i.name.substr(0,5)&&(t[i.name.replace("data-","")]=i.value)}),t},acf.helpers.version_compare=function(e,t){if(typeof e+typeof t!="stringstring")return!1;for(var i=e.split("."),a=t.split("."),n=0,s=Math.max(i.length,a.length);s>n;n++){if(i[n]&&!a[n]&&parseInt(i[n])>0||parseInt(i[n])>parseInt(a[n]))return 1;if(a[n]&&!i[n]&&parseInt(a[n])>0||parseInt(i[n])<parseInt(a[n]))return-1}return 0},acf.helpers.uniqid=function(){var e=new Date;return e.getTime()},acf.helpers.url_to_object=function(e){var t={},a=e.split("&");for(i in a){var n=a[i].split("=");t[decodeURIComponent(n[0])]=decodeURIComponent(n[1])}return t},acf.helpers.sortable=function(e,t){return t.children().each(function(){$(this).width($(this).width())}),t},acf.helpers.is_clone_field=function(e){return e.attr("name")&&-1!=e.attr("name").indexOf("[acfcloneindex]")?!0:!1},acf.helpers.add_message=function(e,t){var e=$('<div class="acf-message-wrapper"><div class="message updated"><p>'+e+"</p></div></div>");t.prepend(e),setTimeout(function(){e.animate({opacity:0},250,function(){e.remove()})},1500)},$.fn.exists=function(){return $(this).length>0},acf.media={div:null,frame:null,render_timout:null,clear_frame:function(){this.frame&&(this.frame.detach(),this.frame.dispose(),this.frame=null)},type:function(){var e="thickbox";return"undefined"!=typeof wp&&(e="backbone"),e},init:function(){if("backbone"!==this.type())return!1;if(!acf.helpers.isset(wp,"media","view","AttachmentCompat","prototype"))return!1;var e=wp.media.view.AttachmentCompat.prototype;e.orig_render=e.render,e.orig_dispose=e.dispose,e.className="compat-item acf_postbox no_box",e.render=function(){var e=this;return e.ignore_render?this:(this.orig_render(),setTimeout(function(){var t=e.$el.closest(".media-modal");if(!t.hasClass("acf-media-modal")&&!t.find(".media-frame-router .acf-expand-details").exists()){var i=$(['<a href="#" class="acf-expand-details">','<span class="icon"></span>','<span class="is-closed">'+acf.l10n.core.expand_details+"</span>",'<span class="is-open">'+acf.l10n.core.collapse_details+"</span>","</a>"].join(""));i.on("click",function(e){e.preventDefault(),t.hasClass("acf-expanded")?t.removeClass("acf-expanded"):t.addClass("acf-expanded")}),t.find(".media-frame-router").append(i)}},0),clearTimeout(acf.media.render_timout),acf.media.render_timout=setTimeout(function(){$(document).trigger("acf/setup_fields",[e.$el])},50),this)},e.dispose=function(){$(document).trigger("acf/remove_fields",[this.$el]),this.orig_dispose()},e.save=function(e){var t={},i={};e&&e.preventDefault(),_.each(this.$el.serializeArray(),function(e){"[]"===e.name.slice(-2)&&(e.name=e.name.replace("[]",""),"undefined"==typeof i[e.name]&&(i[e.name]=-1),i[e.name]++,e.name+="["+i[e.name]+"]"),t[e.name]=e.value}),this.ignore_render=!0,this.model.saveCompat(t)}}},acf.conditional_logic={items:[],init:function(){var e=this;$(document).on("change",".field input, .field textarea, .field select",function(){$("#acf-has-changed").exists()&&$("#acf-has-changed").val(1),e.change($(this))}),$(document).on("acf/setup_fields",function(t,i){e.refresh($(i))}),e.refresh()},change:function(e){var t=this,i=e.closest(".field"),a=i.attr("data-field_key");$.each(this.items,function(e,i){$.each(i.rules,function(e,n){n.field==a&&t.refresh_field(i)})})},refresh_field:function(e){var t=this,i=$(".field_key-"+e.field);i.each(function(){var i=!0;"any"==e.allorany&&(i=!1);var a=$(this),n=!0;$.each(e.rules,function(s,o){var l=$(".field_key-"+o.field);l.hasClass("sub_field")&&(l=a.siblings(".field_key-"+o.field),n=!1,l.exists()||(a.parents("tr").each(function(){return l=$(this).find(".field_key-"+o.field),l.exists()?!1:void 0}),n=!0));var r=a.parent("tr").parent().parent("table").parent(".layout");r.exists()&&(n=!0,a.is("th")&&l.is("th")&&(l=a.closest(".layout").find("td.field_key-"+o.field)));var r=a.parent("tr").parent().parent("table").parent(".repeater");r.exists()&&"1"==r.attr("data-max_rows")&&(n=!0,a.is("th")&&l.is("th")&&(l=a.closest("table").find("td.field_key-"+o.field)));var c=t.calculate(o,l,a);if("all"==e.allorany){if(0==c)return i=!1,!1}else if(1==c)return i=!0,!1}),a.removeClass("acf-conditional_logic-hide acf-conditional_logic-show acf-show-blank"),i?(a.find("input, textarea, select").removeAttr("disabled"),a.addClass("acf-conditional_logic-show"),$(document).trigger("acf/conditional_logic/show",[a,e])):(a.find("input, textarea, select").attr("disabled","disabled"),a.addClass("acf-conditional_logic-hide"),n||a.addClass("acf-show-blank"),$(document).trigger("acf/conditional_logic/hide",[a,e]))})},refresh:function(e){e=e||$("body");var t=this;$.each(this.items,function(i,a){$.each(a.rules,function(i,n){e.find('.field[data-field_key="'+a.field+'"]').exists()&&t.refresh_field(a)})})},calculate:function(e,t,i){var a=!1;if(t.hasClass("field_type-true_false")||t.hasClass("field_type-checkbox")||t.hasClass("field_type-radio")){var n=t.find('input[value="'+e.value+'"]:checked').exists();"=="==e.operator?n&&(a=!0):n||(a=!0)}else{var s=t.find("input, textarea, select").last().val();$.isArray(s)||(s=[s]),"=="==e.operator?$.inArray(e.value,s)>-1&&(a=!0):$.inArray(e.value,s)<0&&(a=!0)}return a}},$(document).ready(function(){acf.conditional_logic.init(),$(".acf_postbox > .inside > .options").each(function(){$(this).closest(".acf_postbox").addClass($(this).attr("data-layout"))}),$('#metakeyselect option[value^="field_"]').remove()}),$(window).load(function(){acf.media.init(),setTimeout(function(){try{$.isNumeric(acf.o.post_id)&&(wp.media.view.settings.post.id=acf.o.post_id)}catch(e){}$(document).trigger("acf/setup_fields",[$("#poststuff")])},10)}),acf.fields.gallery={add:function(){},edit:function(){},update_count:function(){},hide_selected_items:function(){},text:{title_add:"Select Images"}}}(jQuery),function($){function e(){var e=[];$(".categorychecklist input:checked, .acf-taxonomy-field input:checked, .acf-taxonomy-field option:selected").each(function(){$(this).is(":hidden")||$(this).is(":disabled")||$(this).closest(".media-frame").exists()||$(this).closest(".acf-taxonomy-field").exists()&&"0"==$(this).closest(".acf-taxonomy-field").attr("data-load_save")||-1===e.indexOf($(this).val())&&e.push($(this).val())}),acf.screen.post_category=e,acf.screen.taxonomy=e,$(document).trigger("acf/update_field_groups")}acf.screen={action:"acf/location/match_field_groups_ajax",post_id:0,page_template:0,page_parent:0,page_type:0,post_category:0,post_format:0,taxonomy:0,lang:0,nonce:0},$(document).ready(function(){if(acf.screen.post_id=acf.o.post_id,acf.screen.nonce=acf.o.nonce,$("#icl-als-first").length>0){var e=$("#icl-als-first").children("a").attr("href"),t=new RegExp("lang=([^&#]*)"),i=t.exec(e);acf.screen.lang=i[1]}}),$(document).on("acf/update_field_groups",function(){return acf.screen.post_id&&$.isNumeric(acf.screen.post_id)?void $.ajax({url:ajaxurl,data:acf.screen,type:"post",dataType:"json",success:function(e){return e?($(".acf_postbox").addClass("acf-hidden"),$(".acf_postbox-toggle").addClass("acf-hidden"),0==e.length?!1:($.each(e,function(e,t){var i=$("#acf_"+t),a=$('#adv-settings .acf_postbox-toggle[for="acf_'+t+'-hide"]');i.removeClass("acf-hidden hide-if-js"),a.removeClass("acf-hidden"),a.find('input[type="checkbox"]').attr("checked","checked"),i.find(".acf-replace-with-fields").each(function(){var e=$(this);$.ajax({url:ajaxurl,data:{action:"acf/post/render_fields",acf_id:t,post_id:acf.o.post_id,nonce:acf.o.nonce},type:"post",dataType:"html",success:function(t){e.replaceWith(t),$(document).trigger("acf/setup_fields",i)}})})}),void $.ajax({url:ajaxurl,data:{action:"acf/post/get_style",acf_id:e[0],nonce:acf.o.nonce},type:"post",dataType:"html",success:function(e){$("#acf_style").html(e)}}))):!1}}):!1}),$(document).on("change","#page_template",function(){acf.screen.page_template=$(this).val(),$(document).trigger("acf/update_field_groups")}),$(document).on("change","#parent_id",function(){var e=$(this).val();""!=e?(acf.screen.page_type="child",acf.screen.page_parent=e):(acf.screen.page_type="parent",acf.screen.page_parent=0),$(document).trigger("acf/update_field_groups")}),$(document).on("change",'#post-formats-select input[type="radio"]',function(){var e=$(this).val();"0"==e&&(e="standard"),acf.screen.post_format=e,$(document).trigger("acf/update_field_groups")}),$(document).on("change",".categorychecklist input, .acf-taxonomy-field input, .acf-taxonomy-field select",function(){$(this).closest(".acf-taxonomy-field").exists()&&"0"==$(this).closest(".acf-taxonomy-field").attr("data-save")||$(this).closest(".media-frame").exists()||setTimeout(function(){e()},1)})}(jQuery),function($){var e=acf.fields.color_picker={$el:null,$input:null,set:function(e){return $.extend(this,e),this.$input=this.$el.find('input[type="text"]'),this},init:function(){var e=this.$input;acf.helpers.is_clone_field(e)||this.$input.wpColorPicker()}};$(document).on("acf/setup_fields",function(t,i){$(i).find(".acf-color_picker").each(function(){e.set({$el:$(this)}).init()})})}(jQuery),function($){acf.fields.date_picker={$el:null,$input:null,$hidden:null,o:{},set:function(e){return $.extend(this,e),this.$input=this.$el.find('input[type="text"]'),this.$hidden=this.$el.find('input[type="hidden"]'),this.o=acf.helpers.get_atts(this.$el),this},init:function(){if(!acf.helpers.is_clone_field(this.$hidden)){this.$input.val(this.$hidden.val());var e=$.extend({},acf.l10n.date_picker,{dateFormat:this.o.save_format,altField:this.$hidden,altFormat:this.o.save_format,changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.o.first_day});this.$input.addClass("active").datepicker(e),this.$input.datepicker("option","dateFormat",this.o.display_format),$("body > #ui-datepicker-div").length>0&&$("#ui-datepicker-div").wrap('<div class="ui-acf" />')}},blur:function(){this.$input.val()||this.$hidden.val("")}},$(document).on("acf/setup_fields",function(e,t){$(t).find(".acf-date_picker").each(function(){acf.fields.date_picker.set({$el:$(this)}).init()})}),$(document).on("blur",'.acf-date_picker input[type="text"]',function(e){acf.fields.date_picker.set({$el:$(this).parent()}).blur()})}(jQuery),function($){var e=acf.media;acf.fields.file={$el:null,$input:null,o:{},set:function(e){return $.extend(this,e),this.$input=this.$el.find('input[type="hidden"]'),this.o=acf.helpers.get_atts(this.$el),this.o.multiple=this.$el.closest(".repeater").exists()?!0:!1,this.o.query={},"uploadedTo"==this.o.library&&(this.o.query.uploadedTo=acf.o.post_id),this},init:function(){acf.helpers.is_clone_field(this.$input)},add:function(t){var i=e.div;i.find(".acf-file-icon").attr("src",t.icon),i.find(".acf-file-title").text(t.title),i.find(".acf-file-name").text(t.name).attr("href",t.url),i.find(".acf-file-size").text(t.size),i.find(".acf-file-value").val(t.id).trigger("change"),i.addClass("active"),i.closest(".field").removeClass("error")},edit:function(){var t=this.$input.val();e.div=this.$el,e.clear_frame(),e.frame=wp.media({title:acf.l10n.file.edit,multiple:!1,button:{text:acf.l10n.file.update}}),e.frame.on("open",function(){"browse"!=e.frame.content._mode&&e.frame.content.mode("browse"),e.frame.$el.closest(".media-modal").addClass("acf-media-modal acf-expanded");var i=e.frame.state().get("selection"),a=wp.media.attachment(t);$.isEmptyObject(a.changed)&&a.fetch(),i.add(a)}),e.frame.on("close",function(){e.frame.$el.closest(".media-modal").removeClass("acf-media-modal")}),acf.media.frame.open()},remove:function(){this.$el.find(".acf-file-icon").attr("src",""),this.$el.find(".acf-file-title").text(""),this.$el.find(".acf-file-name").text("").attr("href",""),this.$el.find(".acf-file-size").text(""),this.$el.find(".acf-file-value").val("").trigger("change"),this.$el.removeClass("active")},popup:function(){var t=this;return e.div=this.$el,e.clear_frame(),e.frame=wp.media({states:[new wp.media.controller.Library({library:wp.media.query(t.o.query),multiple:t.o.multiple,title:acf.l10n.file.select,priority:20,filterable:"all"})]}),acf.media.frame.on("content:activate",function(){var e=null,i=null;try{e=acf.media.frame.content.get().toolbar,i=e.get("filters")}catch(a){}return i?void("uploadedTo"==t.o.library&&(i.$el.find('option[value="uploaded"]').remove(),i.$el.after("<span>"+acf.l10n.file.uploadedTo+"</span>"),$.each(i.filters,function(e,t){t.props.uploadedTo=acf.o.post_id}))):!1}),acf.media.frame.on("select",function(){if(selection=e.frame.state().get("selection"),selection){var t=0;selection.each(function(i){if(t++,t>1){var a=e.div.closest("td"),n=a.closest(".row"),s=n.closest(".repeater"),o=a.attr("data-field_key"),l="td .acf-file-uploader:first";o&&(l='td[data-field_key="'+o+'"] .acf-file-uploader'),n.next(".row").exists()||s.find(".add-row-end").trigger("click"),e.div=n.next(".row").find(l)}var r={id:i.id,title:i.attributes.title,name:i.attributes.filename,url:i.attributes.url,icon:i.attributes.icon,size:i.attributes.filesize};acf.fields.file.add(r)})}}),acf.media.frame.open(),!1}},$(document).on("click",".acf-file-uploader .acf-button-edit",function(e){e.preventDefault(),acf.fields.file.set({$el:$(this).closest(".acf-file-uploader")}).edit()}),$(document).on("click",".acf-file-uploader .acf-button-delete",function(e){e.preventDefault(),acf.fields.file.set({$el:$(this).closest(".acf-file-uploader")}).remove()}),$(document).on("click",".acf-file-uploader .add-file",function(e){e.preventDefault(),acf.fields.file.set({$el:$(this).closest(".acf-file-uploader")}).popup()})}(jQuery),function($){acf.fields.google_map={$el:null,$input:null,o:{},ready:!1,geocoder:!1,map:!1,maps:{},set:function(e){return $.extend(this,e),this.$input=this.$el.find(".value"),this.o=acf.helpers.get_atts(this.$el),this.maps[this.o.id]&&(this.map=this.maps[this.o.id]),this},init:function(){this.geocoder||(this.geocoder=new google.maps.Geocoder),this.ready=!0,acf.helpers.is_clone_field(this.$input)||this.render()},render:function(){var e=this,t=this.$el,i={zoom:parseInt(this.o.zoom),center:new google.maps.LatLng(this.o.lat,this.o.lng),mapTypeId:google.maps.MapTypeId.ROADMAP};this.map=new google.maps.Map(this.$el.find(".canvas")[0],i);var a=new google.maps.places.Autocomplete(this.$el.find(".search")[0]);a.map=this.map,a.bindTo("bounds",this.map),this.map.marker=new google.maps.Marker({draggable:!0,raiseOnDrag:!0,map:this.map}),this.map.$el=this.$el;var n=this.$el.find(".input-lat").val(),s=this.$el.find(".input-lng").val();n&&s&&this.update(n,s).center(),google.maps.event.addListener(a,"place_changed",function(t){var i=this.map.$el,a=i.find(".search").val();i.find(".input-address").val(a),i.find(".title h4").text(a);var n=this.getPlace();if(n.geometry){var s=n.geometry.location.lat(),o=n.geometry.location.lng();e.set({$el:i}).update(s,o).center()}else e.geocoder.geocode({address:a},function(t,a){if(a!=google.maps.GeocoderStatus.OK)return void console.log("Geocoder failed due to: "+a);if(!t[0])return void console.log("No results found");n=t[0];var s=n.geometry.location.lat(),o=n.geometry.location.lng();e.set({$el:i}).update(s,o).center()})}),google.maps.event.addListener(this.map.marker,"dragend",function(){var t=this.map.$el,i=this.map.marker.getPosition(),a=i.lat(),n=i.lng();e.set({$el:t}).update(a,n).sync()}),google.maps.event.addListener(this.map,"click",function(t){var i=this.$el,a=t.latLng.lat(),n=t.latLng.lng();e.set({$el:i}).update(a,n).sync()}),this.maps[this.o.id]=this.map},update:function(e,t){var i=new google.maps.LatLng(e,t);return this.$el.find(".input-lat").val(e),this.$el.find(".input-lng").val(t).trigger("change"),this.map.marker.setPosition(i),this.map.marker.setVisible(!0),this.$el.addClass("active"),this.$el.closest(".field").removeClass("error"),this},center:function(){var e=this.map.marker.getPosition(),t=this.o.lat,i=this.o.lng;e&&(t=e.lat(),i=e.lng());var a=new google.maps.LatLng(t,i);this.map.setCenter(a)},sync:function(){var e=this.$el,t=this.map.marker.getPosition(),i=new google.maps.LatLng(t.lat(),t.lng());return this.geocoder.geocode({latLng:i},function(t,i){if(i!=google.maps.GeocoderStatus.OK)return void console.log("Geocoder failed due to: "+i);if(!t[0])return void console.log("No results found");var a=t[0];e.find(".title h4").text(a.formatted_address),e.find(".input-address").val(a.formatted_address).trigger("change")}),this},locate:function(){var e=this,t=this.$el;return navigator.geolocation?(t.find(".title h4").text(acf.l10n.google_map.locating+"..."),t.addClass("active"),void navigator.geolocation.getCurrentPosition(function(i){var a=i.coords.latitude,n=i.coords.longitude;e.set({$el:t}).update(a,n).sync().center()})):(alert(acf.l10n.google_map.browser_support),this)},clear:function(){this.$el.removeClass("active"),this.$el.find(".search").val(""),this.$el.find(".input-address").val(""),this.$el.find(".input-lat").val(""),this.$el.find(".input-lng").val(""),this.map.marker.setVisible(!1)},edit:function(){this.$el.removeClass("active");var e=this.$el.find(".title h4").text();this.$el.find(".search").val(e).focus()},refresh:function(){google.maps.event.trigger(this.map,"resize"),this.center()}},$(document).on("acf/setup_fields",function(e,t){$fields=$(t).find(".acf-google-map"),$fields.exists()&&("undefined"==typeof google?$.getScript("https://www.google.com/jsapi",function(){google.load("maps","3",{other_params:"sensor=false&libraries=places",callback:function(){$fields.each(function(){acf.fields.google_map.set({$el:$(this)}).init()})}})}):google.load("maps","3",{other_params:"sensor=false&libraries=places",callback:function(){$fields.each(function(){acf.fields.google_map.set({$el:$(this)}).init()})}}))}),$(document).on("click",".acf-google-map .acf-sprite-remove",function(e){e.preventDefault(),acf.fields.google_map.set({$el:$(this).closest(".acf-google-map")}).clear(),$(this).blur()}),$(document).on("click",".acf-google-map .acf-sprite-locate",function(e){e.preventDefault(),acf.fields.google_map.set({$el:$(this).closest(".acf-google-map")}).locate(),$(this).blur()}),$(document).on("click",".acf-google-map .title h4",function(e){e.preventDefault(),acf.fields.google_map.set({$el:$(this).closest(".acf-google-map")}).edit()}),$(document).on("keydown",".acf-google-map .search",function(e){return 13==e.which?!1:void 0}),$(document).on("blur",".acf-google-map .search",function(e){var t=$(this).closest(".acf-google-map");t.find(".input-lat").val()&&t.addClass("active")}),$(document).on("acf/fields/tab/show acf/conditional_logic/show",function(e,t){acf.fields.google_map.ready&&"google_map"==t.attr("data-field_type")&&acf.fields.google_map.set({$el:t.find(".acf-google-map")}).refresh()})}(jQuery),function($){var e=acf.media;acf.fields.image={$el:null,$input:null,o:{},set:function(e){return $.extend(this,e),this.$input=this.$el.find('input[type="hidden"]'),this.o=acf.helpers.get_atts(this.$el),this.o.multiple=this.$el.closest(".repeater").exists()?!0:!1,this.o.query={type:"image"},"uploadedTo"==this.o.library&&(this.o.query.uploadedTo=acf.o.post_id),this},init:function(){acf.helpers.is_clone_field(this.$input)},add:function(t){var i=e.div;i.find(".acf-image-image").attr("src",t.url),i.find(".acf-image-value").val(t.id).trigger("change"),i.addClass("active"),i.closest(".field").removeClass("error")},edit:function(){var t=this.$input.val();e.div=this.$el,e.clear_frame(),e.frame=wp.media({title:acf.l10n.image.edit,multiple:!1,button:{text:acf.l10n.image.update}}),e.frame.on("open",function(){"browse"!=e.frame.content._mode&&e.frame.content.mode("browse"),e.frame.$el.closest(".media-modal").addClass("acf-media-modal acf-expanded");var i=e.frame.state().get("selection"),a=wp.media.attachment(t);$.isEmptyObject(a.changed)&&a.fetch(),i.add(a)}),e.frame.on("close",function(){e.frame.$el.closest(".media-modal").removeClass("acf-media-modal")}),acf.media.frame.open()},remove:function(){this.$el.find(".acf-image-image").attr("src",""),this.$el.find(".acf-image-value").val("").trigger("change"),this.$el.removeClass("active")},popup:function(){var t=this;return e.div=this.$el,e.clear_frame(),e.frame=wp.media({states:[new wp.media.controller.Library({library:wp.media.query(t.o.query),multiple:t.o.multiple,title:acf.l10n.image.select,priority:20,filterable:"all"})]}),acf.media.frame.on("content:activate",function(){var e=null,i=null;try{e=acf.media.frame.content.get().toolbar,i=e.get("filters")}catch(a){}return i?($.each(i.filters,function(e,t){t.props.type="image"}),"uploadedTo"==t.o.library&&(i.$el.find('option[value="uploaded"]').remove(),i.$el.after("<span>"+acf.l10n.image.uploadedTo+"</span>"),$.each(i.filters,function(e,t){t.props.uploadedTo=acf.o.post_id})),i.$el.find("option").each(function(){var e=$(this).attr("value");("uploaded"!=e||"all"!=t.o.library)&&-1===e.indexOf("image")&&$(this).remove()}),void i.$el.val("image").trigger("change")):!1}),acf.media.frame.on("select",function(){if(selection=e.frame.state().get("selection"),selection){var i=0;selection.each(function(a){if(i++,i>1){var n=e.div.closest("td"),s=n.closest(".row"),o=s.closest(".repeater"),l=n.attr("data-field_key"),r="td .acf-image-uploader:first";l&&(r='td[data-field_key="'+l+'"] .acf-image-uploader'),s.next(".row").exists()||o.find(".add-row-end").trigger("click"),e.div=s.next(".row").find(r)}var c={id:a.id,url:a.attributes.url};a.attributes.sizes&&a.attributes.sizes[t.o.preview_size]&&(c.url=a.attributes.sizes[t.o.preview_size].url),acf.fields.image.add(c)})}}),acf.media.frame.open(),!1},text:{title_add:"Select Image",title_edit:"Edit Image"}},$(document).on("click",".acf-image-uploader .acf-button-edit",function(e){e.preventDefault(),acf.fields.image.set({$el:$(this).closest(".acf-image-uploader")}).edit()}),$(document).on("click",".acf-image-uploader .acf-button-delete",function(e){e.preventDefault(),acf.fields.image.set({$el:$(this).closest(".acf-image-uploader")}).remove()}),$(document).on("click",".acf-image-uploader .add-image",function(e){e.preventDefault(),acf.fields.image.set({$el:$(this).closest(".acf-image-uploader")}).popup()})}(jQuery),function($){acf.fields.radio={$el:null,$input:null,$other:null,farbtastic:null,set:function(e){return $.extend(this,e),this.$input=this.$el.find('input[type="radio"]:checked'),this.$other=this.$el.find('input[type="text"]'),this},change:function(){"other"==this.$input.val()?(this.$other.attr("name",this.$input.attr("name")),this.$other.show()):(this.$other.attr("name",""),this.$other.hide())}},$(document).on("change",'.acf-radio-list input[type="radio"]',function(e){acf.fields.radio.set({$el:$(this).closest(".acf-radio-list")}).change()})}(jQuery),function($){acf.fields.relationship={$el:null,$input:null,$left:null,$right:null,o:{},timeout:null,set:function(e){return $.extend(this,e),this.$input=this.$el.children('input[type="hidden"]'),this.$left=this.$el.find(".relationship_left"),this.$right=this.$el.find(".relationship_right"),this.o=acf.helpers.get_atts(this.$el),this},init:function(){var e=this;if(!acf.helpers.is_clone_field(this.$input)){this.$right.find(".relationship_list").height(this.$left.height()-2),this.$right.find(".relationship_list").sortable({axis:"y",items:"> li",forceHelperSize:!0,forcePlaceholderSize:!0,scroll:!0,update:function(){e.$input.trigger("change")}});var t=this.$el;this.$left.find(".relationship_list").scrollTop(0).on("scroll",function(i){if(!t.hasClass("loading")&&!t.hasClass("no-results")&&$(this).scrollTop()+$(this).innerHeight()>=$(this).get(0).scrollHeight){var a=parseInt(t.attr("data-paged"));t.attr("data-paged",a+1),e.set({$el:t}).fetch()}}),this.fetch()}},fetch:function(){var e=this,t=this.$el;t.addClass("loading"),$.ajax({url:acf.o.ajaxurl,type:"post",dataType:"json",data:$.extend({action:"acf/fields/relationship/query_posts",post_id:acf.o.post_id,nonce:acf.o.nonce},this.o),success:function(i){e.set({$el:t}).render(i)}})},render:function(e){var t=this;return this.$el.removeClass("no-results").removeClass("loading"),1==this.o.paged&&this.$el.find(".relationship_left li:not(.load-more)").remove(),e&&e.html?(this.$el.find(".relationship_left .load-more").before(e.html),e.next_page_exists||this.$el.addClass("no-results"),void this.$left.find("a").each(function(){var e=$(this).attr("data-post_id");t.$right.find('a[data-post_id="'+e+'"]').exists()&&$(this).parent().addClass("hide")})):void this.$el.addClass("no-results")},add:function(e){var t=e.attr("data-post_id"),i=e.html();if(this.$right.find("a").length>=this.o.max)return alert(acf.l10n.relationship.max.replace("{max}",this.o.max)),!1;if(e.parent().hasClass("hide"))return!1;e.parent().addClass("hide");var a={post_id:e.attr("data-post_id"),title:e.html(),name:this.$input.attr("name")},n=_.template(acf.l10n.relationship.tmpl_li,a);this.$right.find(".relationship_list").append(n),this.$input.trigger("change"),this.$el.closest(".field").removeClass("error")},remove:function(e){e.parent().remove(),this.$left.find('a[data-post_id="'+e.attr("data-post_id")+'"]').parent("li").removeClass("hide"),this.$input.trigger("change")}},$(document).on("acf/setup_fields",function(e,t){$(t).find(".acf_relationship").each(function(){acf.fields.relationship.set({$el:$(this)}).init()})}),$(document).on("change",".acf_relationship .select-post_type",function(e){var t=$(this).val(),i=$(this).closest(".acf_relationship");i.attr("data-post_type",t),i.attr("data-paged",1),acf.fields.relationship.set({$el:i}).fetch()}),$(document).on("click",".acf_relationship .relationship_left .relationship_list a",function(e){e.preventDefault(),acf.fields.relationship.set({$el:$(this).closest(".acf_relationship")}).add($(this)),$(this).blur()}),$(document).on("click",".acf_relationship .relationship_right .relationship_list a",function(e){e.preventDefault(),acf.fields.relationship.set({$el:$(this).closest(".acf_relationship")}).remove($(this)),$(this).blur()}),$(document).on("keyup",".acf_relationship input.relationship_search",function(e){var t=$(this).val(),i=$(this).closest(".acf_relationship");i.attr("data-s",t),i.attr("data-paged",1),clearTimeout(acf.fields.relationship.timeout),acf.fields.relationship.timeout=setTimeout(function(){acf.fields.relationship.set({$el:i}).fetch()},500)}),$(document).on("keypress",".acf_relationship input.relationship_search",function(e){13==e.which&&e.preventDefault()})}(jQuery),function($){acf.fields.tab={add_group:function(e){var t="";t=e.is("tbody")?'<tr class="acf-tab-wrap"><td colspan="2"><ul class="hl clearfix acf-tab-group"></ul></td></tr>':'<div class="acf-tab-wrap"><ul class="hl clearfix acf-tab-group"></ul></div>',e.children(".field_type-tab:first").before(t)},add_tab:function(e){var t=e.closest(".field"),i=t.parent(),a=t.attr("data-field_key"),n=e.text();i.children(".acf-tab-wrap").exists()||this.add_group(i),i.children(".acf-tab-wrap").find(".acf-tab-group").append('<li><a class="acf-tab-button" href="#" data-key="'+a+'">'+n+"</a></li>")},toggle:function(e){var t=this,i=e.closest(".acf-tab-wrap").parent(),a=e.attr("data-key");e.parent("li").addClass("active").siblings("li").removeClass("active"),i.children(".field_type-tab").each(function(){var e=$(this);e.attr("data-field_key")==a?t.show_tab_fields($(this)):t.hide_tab_fields($(this))})},show_tab_fields:function(e){e.nextUntil(".field_type-tab").each(function(){$(this).removeClass("acf-tab_group-hide").addClass("acf-tab_group-show"),$(document).trigger("acf/fields/tab/show",[$(this)])})},hide_tab_fields:function(e){e.nextUntil(".field_type-tab").each(function(){$(this).removeClass("acf-tab_group-show").addClass("acf-tab_group-hide"),$(document).trigger("acf/fields/tab/hide",[$(this)])})},refresh:function(e){var t=this;e.find(".acf-tab-group").each(function(){$(this).find(".acf-tab-button:first").each(function(){t.toggle($(this))})})}},$(document).on("acf/setup_fields",function(e,t){$(t).find(".acf-tab").each(function(){acf.fields.tab.add_tab($(this))}),acf.fields.tab.refresh($(t))}),$(document).on("click",".acf-tab-button",function(e){e.preventDefault(),acf.fields.tab.toggle($(this)),$(this).trigger("blur")}),$(document).on("acf/conditional_logic/hide",function(e,t,i){if("tab"==t.attr("data-field_type")){var a=t.siblings(".acf-tab-wrap").find('a[data-key="'+t.attr("data-field_key")+'"]');a.is(":hidden")||(a.parent().hide(),a.parent().siblings(":visible").exists()?a.parent().siblings(":visible").first().children("a").trigger("click"):acf.fields.tab.hide_tab_fields(t))}}),$(document).on("acf/conditional_logic/show",function(e,t,i){if("tab"==t.attr("data-field_type")){var a=t.siblings(".acf-tab-wrap").find('a[data-key="'+t.attr("data-field_key")+'"]');if(!a.is(":visible"))return a.parent().show(),a.parent().hasClass("active")?void a.trigger("click"):a.parent().siblings(".active").is(":hidden")?void a.trigger("click"):void 0}})}(jQuery),function($){acf.validation={status:!0,disabled:!1,run:function(){var e=this;e.status=!0,$(".field.required, .form-field.required").each(function(){e.validate($(this))})},show_spinner:function(e){if(e.exists()){var t=acf.o.wp_version;parseFloat(t)>=4.2?e.addClass("is-active"):e.css("display","inline-block")}},hide_spinner:function(e){if(e.exists()){var t=acf.o.wp_version;parseFloat(t)>=4.2?e.removeClass("is-active"):e.css("display","none")}},validate:function(e){var t=!1,i=null;if(e.data("validation",!0),e.is(":hidden")&&(t=!0,e.hasClass("acf-tab_group-hide"))){t=!1;var a=e.prevAll(".field_type-tab:first"),n=e.prevAll(".acf-tab-wrap:first");a.hasClass("acf-conditional_logic-hide")?t=!0:i=n.find('.acf-tab-button[data-key="'+a.attr("data-field_key")+'"]')}if(e.hasClass("acf-conditional_logic-hide")&&(t=!0),e.closest(".postbox.acf-hidden").exists()&&(t=!0),!t){if(""==e.find('input[type="text"], input[type="email"], input[type="number"], input[type="hidden"], textarea').val()&&e.data("validation",!1),e.find(".acf_wysiwyg").exists()&&"object"==typeof tinyMCE){e.data("validation",!0);var s=e.find(".wp-editor-area").attr("id"),o=tinyMCE.get(s);o&&!o.getContent()&&e.data("validation",!1)}if(e.find("select").exists()&&(e.data("validation",!0),"null"!=e.find("select").val()&&e.find("select").val()||e.data("validation",!1)),e.find('input[type="radio"]').exists()&&(e.data("validation",!1),e.find('input[type="radio"]:checked').exists()&&e.data("validation",!0)),e.find('input[type="checkbox"]').exists()&&(e.data("validation",!1),e.find('input[type="checkbox"]:checked').exists()&&e.data("validation",!0)),e.find(".acf_relationship").exists()&&(e.data("validation",!1),e.find(".acf_relationship .relationship_right input").exists()&&e.data("validation",!0)),e.find(".repeater").exists()&&(e.data("validation",!1),e.find(".repeater tr.row").exists()&&e.data("validation",!0)),e.find(".acf-gallery").exists()&&(e.data("validation",!1),e.find(".acf-gallery .thumbnail").exists()&&e.data("validation",!0)),$(document).trigger("acf/validate_field",[e]),!e.data("validation")){if(this.status=!1,e.closest(".field").addClass("error"),e.data("validation_message")){var l=e.find("p.label:first"),r=null;l.children(".acf-error-message").remove(),l.append('<span class="acf-error-message"><i class="bit"></i>'+e.data("validation_message")+"</span>")}i&&i.trigger("click")}}}},$(document).on("focus click",".field.required input, .field.required textarea, .field.required select",function(e){$(this).closest(".field").removeClass("error")}),$(document).on("click","#save-post",function(){acf.validation.disabled=!0}),$(document).on("submit","#post",function(){if(acf.validation.disabled)return!0;if(acf.validation.run(),
    !acf.validation.status){var e=$(this);return e.siblings("#message").remove(),e.before('<div id="message" class="error"><p>'+acf.l10n.validation.error+"</p></div>"),$("#submitdiv").exists()&&($("#submitdiv").find(".disabled").removeClass("disabled"),$("#submitdiv").find(".button-disabled").removeClass("button-disabled"),$("#submitdiv").find(".button-primary-disabled").removeClass("button-primary-disabled"),acf.validation.hide_spinner($("#submitdiv .spinner"))),!1}return $(".acf_postbox.acf-hidden").remove(),!0})}(jQuery),function($){var e=acf.fields.wysiwyg={$el:null,$textarea:null,o:{},set:function(e){return $.extend(this,e),this.$textarea=this.$el.find("textarea"),this.o=acf.helpers.get_atts(this.$el),this.o.id=this.$textarea.attr("id"),this},has_tinymce:function(){var e=!1;return"object"==typeof tinyMCE&&(e=!0),e},get_toolbar:function(){return acf.helpers.isset(this,"toolbars",this.o.toolbar)?this.toolbars[this.o.toolbar]:!1},init:function(){if(!acf.helpers.is_clone_field(this.$textarea)){var e=this.get_toolbar(),t="mceAddControl",i="theme_advanced_buttons{i}",a=$.extend({},tinyMCE.settings);if(4==tinymce.majorVersion&&(t="mceAddEditor",i="toolbar{i}"),e)for(var n=1;5>n;n++){var s="";acf.helpers.isset(e,"theme_advanced_buttons"+n)&&(s=e["theme_advanced_buttons"+n]),tinyMCE.settings[i.replace("{i}",n)]=s}tinyMCE.execCommand(t,!1,this.o.id),$(document).trigger("acf/wysiwyg/load",this.o.id),this.add_events(),tinyMCE.settings=a,wpActiveEditor=null}},add_events:function(){var e=this.o.id,t=tinyMCE.get(e);if(t){var i=$("#wp-"+e+"-wrap"),a=$(t.getBody());i.on("click",function(){$(document).trigger("acf/wysiwyg/click",e)}),a.on("focus",function(){$(document).trigger("acf/wysiwyg/focus",e)}),a.on("blur",function(){$(document).trigger("acf/wysiwyg/blur",e)})}},destroy:function(){var e=this.o.id,t="mceRemoveControl";try{var i=tinyMCE.get(e);if(!i)return;4==tinymce.majorVersion&&(t="mceRemoveEditor");var a=i.getContent();tinyMCE.execCommand(t,!1,e),this.$textarea.val(a)}catch(n){}wpActiveEditor=null}};$(document).on("acf/setup_fields",function(t,i){e.has_tinymce()&&($(i).find(".acf_wysiwyg").each(function(){e.set({$el:$(this)}).destroy()}),setTimeout(function(){$(i).find(".acf_wysiwyg").each(function(){e.set({$el:$(this)}).init()})},0))}),$(document).on("acf/remove_fields",function(t,i){e.has_tinymce()&&i.find(".acf_wysiwyg").each(function(){e.set({$el:$(this)}).destroy()})}),$(document).on("acf/wysiwyg/click",function(e,t){wpActiveEditor=t,container=$("#wp-"+t+"-wrap").closest(".field").removeClass("error")}),$(document).on("acf/wysiwyg/focus",function(e,t){wpActiveEditor=t,container=$("#wp-"+t+"-wrap").closest(".field").removeClass("error")}),$(document).on("acf/wysiwyg/blur",function(e,t){wpActiveEditor=null;var i=tinyMCE.get(t);if(i){var a=i.getElement();i.save(),$(a).trigger("change")}}),$(document).on("acf/sortable_start",function(t,i){e.has_tinymce()&&$(i).find(".acf_wysiwyg").each(function(){e.set({$el:$(this)}).destroy()})}),$(document).on("acf/sortable_stop",function(t,i){e.has_tinymce()&&$(i).find(".acf_wysiwyg").each(function(){e.set({$el:$(this)}).init()})}),$(window).load(function(){if(e.has_tinymce()){var t=$("#wp-content-wrap").exists(),i=$("#wp-acf_settings-wrap").exists();mode="tmce",i&&$("#wp-acf_settings-wrap").hasClass("html-active")&&(mode="html"),setTimeout(function(){i&&"html"==mode&&$("#acf_settings-tmce").trigger("click")},1),setTimeout(function(){i&&"html"==mode&&$("#acf_settings-html").trigger("click"),t&&e.set({$el:$("#wp-content-wrap")}).add_events()},11)}}),$(document).on("click",".acf_wysiwyg a.mce_fullscreen",function(){var e=$(this).closest(".acf_wysiwyg"),t=e.attr("data-upload");"no"==t&&$("#mce_fullscreen_container td.mceToolbar .mce_add_media").remove()})}(jQuery);

    Screenshot-see attatchment

  • Solving

    Frozen Options Save in Pro

    Installed Pro 5.0.6 – set up options page (even with just the most basic command) – when I went to save page, it just kept spinning and not saving.

    Have just removed Pro, installed 4.3.8 ACF and purchased the old options page add-on and all good.

    3.9.2 wordpress

  • Helping

    ACF relationship field not being populated in admin with custom post type

    I have an issue where a second relationship ACF metabox is not getting populated with the posts of another custom post type.

    i am using ACF in 2 different custom post types called “recipe” and “product”, i have create 2 relationship fields in the product post type which are called “related products” and “related recipes”

    related products allows the selection of other products, and related recipes allows selections of recipes related to the product.

    in the recipe custom post type i have another acf relationship that is called “Related products” and again, this allows selection of the products custom post type that is related to the current recipe.

    recipes also have custom taxonomies.

    I have tried everything i can think of, removing custom taxonomies, deleting the ACF field and recreating it, mapping the 2 custom post types the same, testing the relationship field in the recipes post type.

    To me it looks like you cannot have 2 different ACF relationship metaboxes in the same post.

    the product post type is created like so

    /* create product custom post */
    /*****************************/
    
     function my_custom_product_posttype() {
    	$labels = array(
    		'name'               => _x( 'Product', 'post type general name' ),
    		'singular_name'      => _x( 'Product', 'post type singular name' ),
    		'add_new'            => _x( 'Add New', 'Product' ),
    		'add_new_item'       => __( 'Add New Product' ),
    		'edit_item'          => __( 'Edit Product' ),
    		'new_item'           => __( 'New Product' ),
    		'all_items'          => __( 'All Products' ),
    		'view_item'          => __( 'View Product' ),
    		'search_items'       => __( 'Search Products' ),
    		'not_found'          => __( 'No Products found' ),
    		'not_found_in_trash' => __( 'No Products found in the Trash' ), 
    		'parent_item_colon'  => '',
    		 'has_archive' => true,
    		
    		'menu_name'          => 'Products'
    	);
    	$args = array(
    		'labels'        => $labels,
    		'description'   => 'Holds our Products specific data',
    		'public'        => true,
    		'exclude_from_search' => false,
    		'query_var' => true,
    		'menu_position' => 4,
    		'capability_type' => 'post',
    		 'publicly_queryable' => true,
    		'supports'      => array( 'title', 'editor', 'thumbnail'),
    		'taxonomies' => array('post_tag'),
    		'has_archive'   => true,
    		'hierarchical' => false,
    		
    		
    		
    	);
    	register_post_type( 'product', $args );	
    }
    add_action( 'init', 'my_custom_product_posttype' );
    
    function my_updated_product_messages( $messages ) {
    	global $post, $post_ID;
    	$messages['product'] = array(
    		0 => '', 
    		1 => sprintf( __('Product updated. <a href="%s">View Product</a>'), esc_url( get_permalink($post_ID) ) ),
    		2 => __('Custom field updated.'),
    		3 => __('Custom field deleted.'),
    		4 => __('Product updated.'),
    		5 => isset($_GET['revision']) ? sprintf( __('Product restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    		6 => sprintf( __('Product published. <a href="%s">View Product</a>'), esc_url( get_permalink($post_ID) ) ),
    		7 => __('Product saved.'),
    		8 => sprintf( __('Product submitted. <a target="_blank" href="%s">Preview Product</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    		9 => sprintf( __('Product scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview Product</a>'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    		10 => sprintf( __('Product draft updated. <a target="_blank" href="%s">Preview Product</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    	);
    	return $messages;
    }
    add_filter( 'post_updated_messages', 'my_updated_product_messages' );
    
    /* end product custom post */
    /*****************************/

    and the recipe post type is created like so.

    /* create recipies custom post */
    /*****************************/
    
     function my_custom_recipe_posttype() {
    	$labels = array(
    		'name'               => _x( 'Recipe', 'post type general name' ),
    		'singular_name'      => _x( 'Recipe', 'post type singular name' ),
    		'add_new'            => _x( 'Add New', 'Recipe' ),
    		'add_new_item'       => __( 'Add New Recipe' ),
    		'edit_item'          => __( 'Edit Recipe' ),
    		'new_item'           => __( 'New Recipe' ),
    		'all_items'          => __( 'All Recipes' ),
    		'view_item'          => __( 'View Recipe' ),
    		'search_items'       => __( 'Search Recipes' ),
    		'not_found'          => __( 'No Recipes found' ),
    		'not_found_in_trash' => __( 'No Recipes found in the Trash' ), 
    		'parent_item_colon'  => '',
    		 'has_archive' => true,
    		
    		'menu_name'          => 'Recipes'
    	);
    	$args = array(
    		'labels'        => $labels,
    		'description'   => 'Holds our Recipe specific data',
    		'public'        => true,
    		'exclude_from_search' => false,
    		'query_var' => true,
    		'menu_position' => 4,
    		'capability_type' => 'post',
    		 'publicly_queryable' => true,
    		'supports'      => array( 'title', 'editor', 'thumbnail'),
    		'taxonomies' => array('post_tag'),
    		'has_archive'   => true,
    		'hierarchical' => false,
    		
    		
    		
    	);
    	register_post_type( 'recipe', $args );	
    }
    add_action( 'init', 'my_custom_recipe_posttype' );
    
    function my_updated_recipe_messages( $messages ) {
    	global $post, $post_ID;
    	$messages['recipe'] = array(
    		0 => '', 
    		1 => sprintf( __('Recipe updated. <a href="%s">View Recipe</a>'), esc_url( get_permalink($post_ID) ) ),
    		2 => __('Custom field updated.'),
    		3 => __('Custom field deleted.'),
    		4 => __('Product updated.'),
    		5 => isset($_GET['revision']) ? sprintf( __('Recipe restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    		6 => sprintf( __('Recipe published. <a href="%s">View Recipe</a>'), esc_url( get_permalink($post_ID) ) ),
    		7 => __('Recipe saved.'),
    		8 => sprintf( __('Recipe submitted. <a target="_blank" href="%s">Preview Recipe</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    		9 => sprintf( __('Recipe scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview Recipe</a>'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    		10 => sprintf( __('Recipe draft updated. <a target="_blank" href="%s">Preview Recipe</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    	);
    	return $messages;
    }
    add_filter( 'post_updated_messages', 'my_updated_recipe_messages' );
    
    /* end recipies custom post */
    /*****************************/

    the recipe post type uses 3 custom taxonomies, which are created like so.

    $labelsIngredients = array(
    		'name'                       => _x( 'Ingredients', 'taxonomy general name' ),
    		'singular_name'              => _x( 'Ingredients', 'taxonomy singular name' ),
    		'search_items'               => __( 'Search Ingredients' ),
    		'popular_items'              => __( 'Popular Ingredients' ),
    		'all_items'                  => __( 'All Ingredients' ),
    		'parent_item'                => null,
    		'parent_item_colon'          => null,
    		'edit_item'                  => __( 'Edit Ingredients' ),
    		'update_item'                => __( 'Update Ingredients' ),
    		'add_new_item'               => __( 'Add New Ingredients' ),
    		'new_item_name'              => __( 'New Ingredients Name' ),
    		'separate_items_with_commas' => __( 'Separate Ingredients with commas' ),
    		'add_or_remove_items'        => __( 'Add or remove Ingredients' ),
    		'choose_from_most_used'      => __( 'Choose from the most used Ingredients' ),
    		'not_found'                  => __( 'No Ingredients found.' ),
    		'menu_name'                  => __( 'Ingredients' ),
    	);
    
    	$argsIngredients = array(
    		'hierarchical'          => false,
    		'labels'                => $labelsIngredients,
    		'show_ui'               => true,
    		'show_admin_column'     => true,
    		'update_count_callback' => '_update_post_term_count',
    		'query_var'             => true,
    		'rewrite'               => array( 'slug' => 'ingredients' ),
    	);
    
    	register_taxonomy( 'ingredients', 'recipe', $argsIngredients );
    	
    /************* end ingredients taxonomy ************/
  • Solved

    Remove spaces and commas from checklist for classes

    I have a number of products that are added to each post and I need a list of those products as classes for each post.

    First the code:

    <li class="<?php the_field( 'products' ); ?>"></li>
    

    Now the output I’m getting:

    <li class="Product One, Product Two, Product Three"></li>
    

    Desired output:

    <li class="product-one product-two product-three"></li>
    

    Any help is appreciated, thanks!

  • Solved

    Cannot remove commas from checkbox values

    Hello!

    I’d like to print out multiple values from a checkbox field, which with the_sub_field('field_name'); works fine to achieve: value1, value2, value3

    However I need to remove the commas from the string, and cannot use str_replace() to achieve: value1 value2 value3

    When using echo implode(', ', get_field('field_name')); WordPress throws an error on implode & invalid arguments. The checkbox is inside a flexible content field and a repeater field. Is there an alternate way to stripping out those commas?

    Thanks!

reply

  • Ok i have updated the code and now it works but somehow you need to have atleast one layout in flexible content for dragging to work.

    add_action('acf/input/admin_footer', function () {
        ?>
        <script type="text/javascript">
    
            (function($) {
    
                acf.add_action('ready', function($el){
                    $(".acf-flexible-content .values").sortable({
                        connectWith: ".acf-flexible-content .values",
                        start: function(event, ui) {
                            acf.do_action('sortstart', ui.item, ui.placeholder);
                        },
                        stop: function(event, ui) {
                            acf.do_action('sortstop', ui.item, ui.placeholder);
                            $(this).find('.mce-tinymce').each(function() {
                                tinyMCE.execCommand('mceRemoveControl', true, $(this).attr('id'));
                                tinyMCE.execCommand('mceAddControl', true, $(this).attr('id'));
                            });
                        }
                    });
    
                    $(".acf-repeater .acf-flexible-content").sortable({
                        connectWith: ".acf-repeater .acf-flexible-content",
                        start: function(event, ui) {
                            acf.do_action('sortstart', ui.item, ui.placeholder);
                        },
                        stop: function(event, ui) {
                            acf.do_action('sortstop', ui.item, ui.placeholder);
                        }
                    });
                });
    
                acf.add_action('sortstop', function ($el) {
                    var $repeater = $($el).closest('.acf-input > .acf-repeater');
                    
                    if ($repeater.length) {
                        var $row = $el.closest('.acf-row');
                        var column_num = $row.attr('data-id');
    
                        // Loop through fields within the dropped element and update names
                        $el.find('[name^="acf[field_"]').each(function() {
                            var field_name = $(this).attr('name');
                            field_name = field_name.match(/\[([a-zA-Z0-9_-]+)\]/g);
                            field_name[1] = '[' + column_num + ']';
                            var new_name = 'acf' + field_name.join('');
                            $(this).attr('name', new_name);
                        });
    
                        // Loop through layouts within the flexible content field
                        $repeater.find('.acf-flexible-content .values > .layout').each(function(index) {
                            $(this).find('.acf-fc-layout-order:first').html(index + 1);
    
                            // Loop through fields within each layout and update names
                            $(this).find('[name^="acf[field_"]').each(function() {
                                var field_name = $(this).attr('name');
                                field_name = field_name.match(/\[([a-zA-Z0-9_-]+)\]/g);
                                var tempIndex = parseInt(field_name[3].match(/([0-9]+)/g));
                                field_name[3] = field_name[3].replace(tempIndex, index);
                                var new_name = 'acf' + field_name.join('');
                                $(this).attr('name', new_name);
                            });
    
                            // Trigger click on selected buttons to activate conditional logic
                            $(this).find('.acf-button-group label.selected').trigger('click');
                        });
                    }
                });
    
            })(jQuery);
    
            function GetSubstringIndex(str, substring, n) {
                var times = 0, index = null;
                while (times < n && index !== -1) {
                    index = str.indexOf(substring, index + 1);
                    times++;
                }
                return index;
            }
    
        </script>
        <?php
    });
    
  • Hello,

    I have the same problem and I read all the posts about this, have you found a solution please ?
    I’am using the checkox ACF and elementor to display it, and I only need to remove the comma between the values. I don’t want to execute JS to do this if it is possible.
    Regards,

  • I have solved several issues using the following:

    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    1 – ACF Field Setup

    I have setup fields as FILED TYPE > LAYOUT > GROUP
    https://www.advancedcustomfields.com/resources/group/

    This allows us to target the fields with a given ACF field group using the field group name.

            if( have_rows('group_name')){
                while(have_rows('group_name')){
                    the_row();  
    
                    if( $subfields = get_row()) {
    

    I am outputting the custom post type, ACF data, to a table using a foreach loop.
    The code is then displayed on our post using a [shortcode]

    <?php
    
    class CUSTOM_SHORTCODES {
    
    			public static function register_shortcodes() {
    				add_shortcode( 'custom_specs', array( __CLASS__, 'boat_specs' ) );
    			}
    
    public static function custom_specs($atts) {
      
    		$out = '';
    		$out .= '<div>';
    		$out .= '<table>';
    		$out .= '<tbody>';
    
    		$subfields = get_row();
    		$field = get_sub_field_object( $key );
    		if( have_rows('specifications')){
    			while(have_rows('specifications')){
    				the_row();  
    				if( $subfields = get_row()) {
    					foreach ($subfields as $key => $value) {
    						if ( !empty($value) ) {
    
    							if(is_array($value)) {
    							$value = @implode(', ', $value);
    							}
    							$field = get_sub_field_object($key);
    								$out .= '<tr class="tb-row"><td class="tb-cell"><span class="acf-label">' . $field['label'] . '</span></td><td class="tb-cell"><span class="acf-value">' . $value . '</span></td></tr>';
    						}
    					}  
    				}
    			}
    		}
    		$out .= '</tbody></table></div>';
    
    		return $out;
    	}	
    		
    }
    CUSTOM_SHORTCODES::register_shortcodes();
    

    In this instance, the demo shortcode is [custom_specs]

    In our foreach loop, we can check to see if a field has value. If it has no value i.e. null then the field does not show in our for each loop.

    if ( !empty($value) ) {
    OR
    https://www.advancedcustomfields.com/resources/hiding-empty-fields/

    If the returned value is an array, we can convert the array to a comma list.

    
    if(is_array($value)) {
    $value = @implode(', ', $value);
    }
    

    Using this method, we can segment our ACF data into different foreach loop shortcodes for our use case scenario.

    Specifications = [custom_specs]
    Standard Features = [custom_feat]
    Options = [custom_opt]

    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    2 – Omit / Remove ACF field from the foreach loop.

    The ‘price’ is recorded as an ACF field in our field group ‘specifications’.
    However, the client does not want to show the ‘price’ field on the table on the front end.

    How do we remove the ACF field ‘price’ from our ‘specifications’ foreach loop?

    OPTION 1 – “SIMPLE”
    Move the ACF field ‘price’ out of the current field group ‘specifications’ so it’s not returned in the shortcode loop [custom_specs].

    If OPTION 1 does not fit your requirements, then try this alternative.

    OPTION 2 – “ACF continue”
    ACF Support has come back with the following. Interestingly, there is no mention of this in the current ACF documentation.

    if( have_rows('specifications')){
                while(have_rows('specifications')){
                    the_row();  
    
                    if( $subfields = get_row()) {
    
                        foreach ($subfields as $key => $value) {
    
                                // Omit 'price' sub field - enter the field key
                                if ($key == 'field_123456789') { //skip this!
                                                    continue;
                                }
    

    Using the ACF field key and continue; we can now remove any ACF field inside our foreach loop.

    Fantastic!
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    3 – Removing Conditional Logic Parent > Child ACF fields from our foreach loop.

    In this scenario, we have the PARENT FIELD1 and the CHILD FIELD2
    The fields can be any ACF field Type: Select, Checkbox, Radio Button, Button Group.

    PARENT FIELD1 (*Required? = Yes)
    ( ) ABC
    ( ) MNO
    ( ) XYZ > Show CHILD FIELD2

    CHILD FIELD2 (*Required? = Yes + Allow Null? = Yes )
    ( ) Choice 1
    ( ) Choice 2
    ( ) Choice 3

    We have conditional logic CHILD FIELD2
    Show this field if <PARENT FIELD1> Value is equal to <XYZ>

    Great!
    If PARENT FIELD1 (•) XYZ is selected, we expect CHILD FIELD2 Choices to show.
    If PARENT FIELD1 ( ) XYZ is de-selected, we can expect FIELD2 to hide.

    • • • • • • • • • • • • • • • • • • • • • •

    Now, this is where it gets tricky.

    As part of our strategy, we want to make it easy for the Client to update the data without making things worse.

    The Client Selects <PARENT FIELD1>(•) XYZ
    CHILD FIELD2 choices are shown.
    All choices are null – they are empty.
    The Client doesn’t make a selection from CHILD FIELD2 and updates the post.
    We get a validation warning – CHILD FIELD2 is set to (*Required) so now we have to make a selection.
    The Client selects CHILD FIELD2 (•) Choice 2
    We validate, and the post is saved.

    CHILD FIELD2 > Choice 2 is saved to the database.

    We run our shortcode loop and CHILD FIELD2 is output into our table.

    The Client decides, no, actually I didn’t want (•) XYZ, I really wanted ( ) ABC
    The Client de-selects ( ) XYZ and selects (•) ABC
    CHILD FIELD2 is hidden.

    Even though <PARENT FIELD1>( )XYZ is not selected, our foreach loop is still outputting CHILD FIELD2 in the table.

    Why ! – you ask?

    In the database CHILD FIELD2 still has a saved value = Choice 2.
    Our foreach loop condition is “only include fields that have value”.
    So CHILD FIELD2 is still showing.

    This stems from core ACF functionality – If the field is set to (*Required) ignore the null.
    https://github.com/elliotcondon/acf/issues/591

    How do we fix this?
    • • • • • • • • • • • • • • • • • • • • • •
    METHOD 1 – On all CHILD FIELD(s) disable (*Required)
    (*Required? = No)
    Each CHILD FIELD2 choice can be toggled ON or OFF. Allowing us to de-select our previous selected option. The post can be validated and saved without having a choice selected. The Database value is cleared on Post Update.

    But wait – this now requires the Client to understand that the CHILD FIELD2 needs to be un-selected before unselecting the PARENT FIELD1.

    LOL
    Sometimes the simplest of workflow solutions are the hardest for clients to remember.
    • • • • • • • • • • • • • • • • • • • • • •
    METHOD 2 – JQuery

    Use jQuery to null the CHILD FIELD when the PARENT FIELD is un-selected.

    This improves our Method 1 workflow, as the Client doesn’t have to remember to unselect the CHILD FIELD2. Our jQuery Function will handle this.

    For this to work, I changed my CHILD FIELD2 field Type to a ‘select’.
    When the Field Type ‘select’ is set to (Allow Null? = Yes) a null choice is added to the top of the dropdown select “-Select-“.
    https://www.advancedcustomfields.com/resources/select/
    I used JQuery to select the first item on the CHILD FIELD2 ‘select’ list
    when the Parent is de-selected.

    In my WordPress Child theme functions.php file I am loading a JS file when is_admin()

    define( 'CHILD_THEM_URI', get_stylesheet_directory_uri() );
    define( 'CHILD_THEM_DIR', get_stylesheet_directory() );
    // register scripts for the wp_admin section
    add_action( 'admin_head', 'register_admin_scripts' );
    function register_admin_scripts() {
        if ( is_admin() ) {
            wp_enqueue_script( 'admin_js', CHILD_THEM_URI . '/includes/admin.js', array( 'jquery' ) );
    
        }
    }

    In the JS File I have the following simple click function.

    
    jQuery(document).ready (function ($) {
    
    $('#parent_field_id').on('click',function () {
                    if ($(this).is(':checked')) {
                        //alert('You have Checked it');
                    } else {
                        //alert('You Un-Checked it');
                        // Set Conditional Select to null  - First Item on the list
                        $("#child_field_id").prop("selectedIndex", 0);
    
                    }
                });
    });
    

    • • • • • • • • • • • • • • • • • • • • • •

    METHOD 3 – delete_field()

    We could write a custom function if PARENT FIELD1 is de-selected then dynamically delete the conditional logic CHILD FIELD2 value from the database. Seems heavy to me!

    delete_field()
    delete_sub_field()

    Someone with better PHP skills than me may wish to provide a solution.
    I look forward to your responses.

    • • • • • • • • • • • • • • • • • • • • • •

    METHOD 4 – FUNCTION REQUEST

    Have an additional toggle option on the ACF CHILD FIELD next to the (AllowNull? = Yes) to turn ON or OFF the required functionality.

    If conditional logic PARENT Field is un-selected – return CHILD FIELD VALUES to the default Null State.

    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    I think thats covers everything for now.

    Hopefully this helps someone else in the future

  • Hi,
    Please see this for better understanding: https://infoobox.com/person/sunil-butolia

    Currently user can fill their parents details in single text box but I want to create separate for mother and father and want to show in single line as mentioned in above link.

    But what if someone only fills one details mother or father then how to remove ‘comma’.

  • Yes, if I remove the function below I don’t have any error :

    add_action('pre_get_posts', 'my_pre_get_posts'); 
    function my_pre_get_posts( $query ) {
    
    	$meta_query = $query->get('meta_query');
    	
    	if( isset($_GET['coup_de_coeur']) )
    	{
    		$meta_query[] = array(
    			'key' => 'coup_de_coeur',
    			'value' => $_GET['coup_de_coeur'],
    			'compare' => 'LIKE',
    		);
    	}
    	$query->set('meta_query', $meta_query);
    	return;
    
    }
    

    I checked and it seems like everything is correctly closed, no comma missing…
    Unfortunatelu the critical error doesn’t provide any line of code so I’m a bit in the dark…
    I tried to put WP Debug to true but no luck either.

  • Saw something funny happening to the quotes so used decimal code for quotes:

    // Variables
    $number_of_events = get_field( 'number_of_events' );
    // print_r($number_of_events);
    $terms = get_field('events_category');
    // print_r($terms);
    // $term_slugs = $terms()->slug;
    $term_slugs ='';
    foreach ( $terms as $term ):
        $term_slugs .= "'" . esc_html( $term->slug ) . "'" . ',';
        endforeach;
    $term_slugs = substr($term_slugs, 0, -1); //Removes very last comma.
    // print_r($term_slugs);
    // local,virtual,
    
    $args = array(
        'post_type' => 'event',
        'posts_per_page' => $number_of_events,
        // 'event_category' => $term_slugs
        'tax_query' => [
            'taxonomy'         => 'event_category',
            'include_children' => false,
            'field'            => 'name',
            // 'terms'            => array_values($term_slugs),
        ],
    );

    still no filtering on event category..

  • I think this is closer now:

    // Variables
    $number_of_events = get_field( 'number_of_events' );
    // print_r($number_of_events);
    $terms = get_field('events_category');
    $term_slugs ='';
    foreach ( $terms as $term ):
        $term_slugs .= esc_html( $term->slug ) . ',';
        endforeach;
    $term_slugs = substr($term_slugs, 0, -1); //Removes very last comma.
    // echo $term_slugs;
    // local,virtual,
    
    $args = array(
        'post_type' => 'event',
        'posts_per_page' => $number_of_events,
        // 'event_category' => $term_slugs
        'tax_query' => [
            'taxonomy'         => 'event_category',
            'include_children' => false,
            'field'            => 'name',
            'terms'            => array($term_slugs),
        ],
    );

    but if I added term names I need to quote them as well still. So testing

    
    // Variables
    $number_of_events = get_field( 'number_of_events' );
    // print_r($number_of_events);
    $terms = get_field('events_category');
    $term_slugs ='';
    foreach ( $terms as $term ):
        $term_slugs .= "'" . esc_html( $term->slug ) . "'" . ',';
        endforeach;
    $term_slugs = substr($term_slugs, 0, -1); //Removes very last comma.
    echo $term_slugs;
    // 'local','virtual'
    $args = array(
        'post_type' => 'event',
        'posts_per_page' => $number_of_events,
        // 'event_category' => $term_slugs
        'tax_query' => [
            'taxonomy'         => 'event_category',
            'include_children' => false,
            'field'            => 'name',
            'terms'            => array($term_slugs),
        ],
    );

    Seems though when I use local as category which has only one post and select 4 as the number of posts I still see all four.

  • This has been covered multiple times here. Let me know if none of the existing topics help you https://support.advancedcustomfields.com/forums/search?bbp_search=remove+comma

  • You can find the code that I have added to content section here.

    https://pastebin.com/sPTUXTPw

    Still struggling to remove comma from displayed results. Not sure if I can add something to this code or to CSS for the div to remove a comma from results…

  • Thank you for the quick response John, I really appreciate your help.

    I understand that shortcodes are set-up for simple fields, but it is working in the_content section of a page I have to use.

    The output can be seen here.https://legally-linked.com/groups/clifford-chance/law-firm-technology/

    All the boxes are showing the array via shortcode.

    I have had a look at the format value link you sent, not sure what to add to functions.php

    Something here for shortcodes for select or array fields

    // Render shortcodes in all select values.
    return do_shortcode( $value );
    }

    or something with this

    acf/format_value/type={$type}

    It’s not clear how to remove the commas.

    Best regards

    John

  • How to remove commas on elementor?
    Thanks

  • Thank you @hube2

    I managed to remove the commas, but now it returns the values x 5…

    This is the code:

    `<p class=”shop-link”>
    <?php $values = get_field(‘shop’);

    if ($values) {
    foreach ($values as $value) {
    echo implode(‘<br />’, $values);
    }
    } ?></p>
    `

  • For me, the problem was that the JSON file that I was trying to import had a comma where there wasn’t suppose to be. Specifically it was on the last line of the location array. Here’s an example, notice here that there is a comma at the end of the “value” line:

    
    "location": [
       [
          {
             "param": "post_template",
             "operator": "==",
             "value": "components\/logo-heading-cta.php",
          }
       ]
    ],
    

    When I removed that comma, like this:

    
    "location": [
       [
          {
             "param": "post_template",
             "operator": "==",
             "value": "components\/logo-heading-cta.php"
          }
       ]
    ],
    

    Then the JSON file imported without any problem. I noticed this because my text editor showed that the comma there was a syntax error. It seems JSON is specific about not having a comma after the last item in an array.

    Maybe this will be the solution for anyone else trying to find an answer to this problem.

  • Hello, I’ve fixed @nerd-attack solution for drag&drop also arrays like gallery field etc.

    
    // acf drag n drop flexible layouts between repeaters
    add_action('acf/input/admin_footer', function () {
        ?>
        <script type="text/javascript">
    
            (function($) {
    
                acf.add_action('ready', function($el){
                    $(".values").sortable({
                        connectWith: ".values",
                        start: function(event, ui) {
                            acf.do_action('sortstart', ui.item, ui.placeholder);
                        },
                        stop: function(event, ui) {
                            acf.do_action('sortstop', ui.item, ui.placeholder);
                            $(this).find('.mce-tinymce').each(function() {
                                tinyMCE.execCommand('mceRemoveControl', true, $(this).attr('id'));
                                tinyMCE.execCommand('mceAddControl', true, $(this).attr('id'));
                            });
                        }
                    });
                });
    
                acf.add_action('sortstop', function ($el) {
    
    		// check if the dropped element is within a repeater field
    		if ($($el).parents('.acf-input > .acf-repeater').length) {
    
    			// get column_num from closest acf-row
    			var column_num = $($el).closest('.acf-row').attr('data-id');
    
    			// loop all (input) fields within dropped element and change / fix name
    			$($el).find('[name^="acf[field_"]').each(function () {
    				var field_name = $(this).attr('name');
    				field_name = field_name.match(/\[([a-zA-Z0-9_-]+\])/g); // split name attribute
    				field_name[1] = '[' + column_num + ']'; // set the new row name
    				var new_name = 'acf' + field_name.join('');
    				$(this).attr('name', new_name);
    			});
    
    			// get closest flexible-content-field and loop all layouts within this flexible-content-field
    			$($el).closest('.acf-field.acf-field-flexible-content').find('.acf-input > .acf-flexible-content > .values > .layout').each(function (index) {
    
    				// update order number
    				$(this).find('.acf-fc-layout-order:first').html(index + 1);
    
    				// loop all (input) fields within dropped element and change / fix name
    				$(this).find('[name^="acf[field_"]').each(function () {
    					var field_name = $(this).attr('name');
    					var is_array = field_name.endsWith('[]')
    					field_name = field_name.match(/\[([a-zA-Z0-9_-]+\])/g); // split name attribute
    					var tempIndex = parseInt(field_name[3].match(/([0-9]+)/g)); // hacky code
    					field_name[3] = field_name[3].replace(tempIndex, index); // set the new index
    					var new_name = 'acf' + field_name.join('');
    
    					$(this).attr('name', new_name + is_array ? '[]' : '');
    				});
    
    				// click already selected buttons to trigger conditional logics
    				$(this).find('.acf-button-group label.selected').trigger('click');
    			});
    		}
    	});
    
            })(jQuery);
    
        </script>
        <?php
    });
    
  • hello @lefthookdigital
    i read above thread, i have solution to display fileds along with “_name” and copy it by one click

    demo >> http://prntscr.com/r00zwx

    in functions.php add below code

    
    /*
    |--------------------------------------------------------------------------
    | acf admin slug
    | https://www.advancedcustomfields.com/resources/acf-render_field/
    | https://www.coderomeos.org/select-and-copy-data-to-clipboard-using-jquery
    |--------------------------------------------------------------------------
    */
    add_action('acf/input/admin_footer', 'my_acf_input_admin_footer');
    function my_acf_input_admin_footer() {
    	if ( get_post_type() != 'acf-field-group' ) { ?>
    		<script type="text/javascript">
                jQuery(function($) {
                    $('#wpwrap').each(function(index) {
                        $(this).on('click','.copy-to-clipboard input', function() {
                            $(this).focus();
                            $(this).select();
                            document.execCommand('copy');
                            //$(".copied").text("Copied to clipboard").show().fadeOut(1200);
                        });
                    });
                });
    		</script>
    		<?php
    	}
    }
    
    // Basic
    add_action('acf/prepare_field/type=text', 'show_field_details', 1);
    add_action('acf/prepare_field/type=textarea', 'show_field_details', 1);
    add_action('acf/prepare_field/type=number', 'show_field_details', 1);
    add_action('acf/prepare_field/type=range', 'show_field_details', 1);
    add_action('acf/prepare_field/type=email', 'show_field_details', 1);
    add_action('acf/prepare_field/type=url', 'show_field_details', 1);
    add_action('acf/prepare_field/type=password', 'show_field_details', 1);
    
    // Content
    add_action('acf/prepare_field/type=image', 'show_field_details', 1);
    add_action('acf/prepare_field/type=file', 'show_field_details', 1);
    add_action('acf/prepare_field/type=wysiwyg', 'show_field_details', 1);
    add_action('acf/prepare_field/type=oembed', 'show_field_details', 1);
    add_action('acf/prepare_field/type=gallery', 'show_field_details', 1);
    
    // Choice
    add_action('acf/prepare_field/type=select', 'show_field_details', 1);
    add_action('acf/prepare_field/type=checkbox', 'show_field_details', 1);
    add_action('acf/prepare_field/type=radio', 'show_field_details', 1);
    add_action('acf/prepare_field/type=button_group', 'show_field_details', 1);
    add_action('acf/prepare_field/type=true_false', 'show_field_details', 1);
    
    // Relational
    add_action('acf/prepare_field/type=link', 'show_field_details', 1);
    add_action('acf/prepare_field/type=post_object', 'show_field_details', 1);
    add_action('acf/prepare_field/type=page_link', 'show_field_details', 1);
    add_action('acf/prepare_field/type=relationship', 'show_field_details', 1);
    add_action('acf/prepare_field/type=taxonomy', 'show_field_details', 1);
    add_action('acf/prepare_field/type=user', 'show_field_details', 1);
    
    // jQuery
    add_action('acf/prepare_field/type=google_map', 'show_field_details', 1);
    add_action('acf/prepare_field/type=date_picker', 'show_field_details', 1);
    add_action('acf/prepare_field/type=date_time_picker', 'show_field_details', 1);
    add_action('acf/prepare_field/type=time_picker', 'show_field_details', 1);
    add_action('acf/prepare_field/type=color_picker', 'show_field_details', 1);
    
    // Layout
    //add_action('acf/prepare_field/type=message', 'show_field_details', 1);
    add_action('acf/prepare_field/type=accordion', 'show_field_details', 1);
    //add_action('acf/prepare_field/type=tab', 'show_field_details', 1);
    add_action('acf/prepare_field/type=group', 'show_field_details', 1);
    add_action('acf/prepare_field/type=repeater', 'show_field_details', 1);
    add_action('acf/prepare_field/type=flexible_content', 'show_field_details', 1);
    add_action('acf/prepare_field/type=clone', 'show_field_details', 1);
    
    function show_field_details($field) {
    	$field['label'] .= '<div class="description copy-to-clipboard" style="margin-bottom: 10px; margin-top: 10px;">
    		<input readonly="readonly" type="text" value="'.trim($field['_name']).'" style="color: #0c5460;">
    	</div>';
    	return $field;
    }
    
    add_action('acf/field_group/admin_footer', 'my_acf_field_group_admin_footer');
    function my_acf_field_group_admin_footer() { ?>
    	<script type="text/javascript">
            (function( $ ){
                $('.description.copy-to-clipboard').remove();
            })(jQuery);
    	</script>
    	<?php
    }
    
Viewing 25 results - 26 through 50 (of 67 total)