name = 'button'; /* * label (string) Multiple words, can include spaces, visible when selecting a field type */ $this->label = __('Button', 'acf-button'); /* * category (string) basic | content | choice | relational | jquery | layout | CUSTOM GROUP NAME */ $this->category = 'basic'; /* * defaults (array) Array of default settings which are merged into the field object. These are used later in settings */ $this->defaults = array( 'default_text' => '', 'default_url' => '', 'allow_advanced'=> array( 'type', 'target', 'color' ), 'default_target'=> '', 'default_color' => 'primary', 'default_size' => '', 'default_style' => '', 'default_type' => 'page' ); /* * l10n (array) Array of strings that are used in JavaScript. This allows JS strings to be translated in PHP and loaded via: * var message = acf._e('button', 'error'); */ $this->l10n = array( 'error' => __('Error! Please enter a higher value', 'acf-button'), ); /* * settings (array) Store plugin settings (url, path, version) as a reference for later use with assets */ $this->settings = $settings; // do not delete! parent::__construct(); } /* * render_field_settings() * * Create extra settings for your field. These are visible when editing a field * * @type action * @since 3.6 * @date 23/01/13 * * @param $field (array) the $field being edited * @return n/a */ function render_field_settings( $field ) { /* * acf_render_field_setting * * This function will create a setting for your field. Simply pass the $field parameter and an array of field settings. * The array of settings does not require a `value` or `prefix`; These settings are found from the $field array. * * More than one setting can be added by copy/paste the above code. * Please note that you must also have a matching $defaults value for the field name (font_size) */ acf_render_field_setting( $field, array( 'label' => __('Allow Advanced Options','acf-button'), 'instructions' => __('Display advanced button options (size, color, style and target)','acf-button'), 'type' => 'checkbox', 'name' => 'allow_advanced', 'choices' => array( 'type' => __("Type",'acf-button'), 'target' => __("Target",'acf-button'), 'color' => __("Color",'acf-button'), 'size' => __("Size",'acf-button'), 'style' => __("Style",'acf-button'), 'class' => __("Class",'acf-button'), ) )); acf_render_field_setting( $field, array( 'label' => __('Default Button Text','acf-button'), // 'instructions' => __('Set default button text when creating a new button','acf-button'), 'type' => 'text', 'name' => 'default_text' )); acf_render_field_setting( $field, array( 'label' => __('Default Button URL','acf-button'), // 'instructions' => __('Appears when creating a new button','acf-button'), 'type' => 'url', 'name' => 'default_url' )); acf_render_field_setting( $field, array( 'label' => __('Set default target','acf-button'), // 'instructions' => __('Set default button target when creating a new button.','acf-button'), 'type' => 'select', 'name' => 'default_target', 'choices' => array( '' => __("Same Window",'acf-button'), '_blank' => __("New Window",'acf-button'), ) )); acf_render_field_setting( $field, array( 'label' => __('Default Color','acf-button'), // 'instructions' => __('Set the default button color when creating a new button.','acf-button'), 'type' => 'select', 'name' => 'default_color', 'choices' => array( 'primary' => __("Primary",'acf-button'), 'secondary' => __("Secondary",'acf-button'), 'success' => __("Success",'acf-button'), 'alert' => __("Alert",'acf-button'), 'warning' => __("Warning",'acf-button'), 'info' => __("Info",'acf-button'), 'disabled' => __("Disabled",'acf-button'), ) )); acf_render_field_setting( $field, array( 'label' => __('Default Size','acf-button'), // 'instructions' => __('Set the default size when creating a new button.','acf-button'), 'type' => 'select', 'name' => 'default_size', 'choices' => array( 'tiny' => __("Tiny",'acf-button'), 'small' => __("Small",'acf-button'), '' => __("Normal",'acf-button'), 'large' => __("Large",'acf-button'), 'huge' => __("Huge",'acf-button'), ) )); acf_render_field_setting( $field, array( 'label' => __('Default Style','acf-button'), // 'instructions' => __('Set the default size when creating a new button.','acf-button'), 'type' => 'select', 'name' => 'default_style', 'choices' => array( '' => __("Normal",'acf-button'), 'expanded' => __("Expanded",'acf-button'), 'hollow' => __("Hollow",'acf-button'), 'round' => __("Round",'acf-button'), 'radius' => __("Radius",'acf-button') ) )); $type_choices = array( 'custom' => __("Custom URL",'acf-button'), 'page' => __("Page",'acf-button'), 'post' => __("Post",'acf-button') ); $args = array( 'public' => true, '_builtin' => false ); $ignore = array( 'page', 'post', 'attachment', 'acf-field', 'acf-field-group' ); $cpts = get_post_types($args, 'objects'); if ( $cpts ) { foreach($cpts as $cpt) { $name = $cpt->name; $label = $cpt->label; $type_choices[$name] = $label; } } acf_render_field_setting( $field, array( 'label' => __('Default Type','acf-button'), // 'instructions' => __('Set the default size when creating a new button.','acf-button'), 'type' => 'select', 'name' => 'default_type', 'choices' => $type_choices )); } /* * render_field() * * Create the HTML interface for your field * * @param $field (array) the $field being rendered * * @type action * @since 3.6 * @date 23/01/13 * * @param $field (array) the $field being edited * @return n/a */ function render_field( $field ) { $field = array_merge($this->defaults, $field); /* * Review the data of $field. * This will show what data is available */ // echo '
';
		// 	print_r( $field );
		// echo '
'; //set defaults if values do not yet exist if ( !isset( $field['value']['text'] ) ) { if ( isset( $field['default_text'] ) ) { $field['value']['text'] = $field['default_text']; } else { $field['value']['text'] = ''; } } if ( !isset( $field['value']['page'] ) ) { $field['value']['page'] = ''; } if ( !isset( $field['value']['post'] ) ) { $field['value']['post'] = ''; } if ( !isset( $field['value']['media'] ) ) { $field['value']['media'] = ''; } if ( !isset( $field['value']['url'] ) ) { if ( isset( $field['default_url'] ) ) { $field['value']['url'] = $field['default_url']; } else { $field['value']['url'] = ''; } } if ( !isset( $field['value']['target'] ) ) { if ( isset( $field['default_target'] ) ) { $field['value']['target'] = $field['default_target']; } else { $field['value']['target'] = ''; } } if ( !isset( $field['value']['color'] ) ) { if ( isset( $field['default_color'] ) ) { $field['value']['color'] = $field['default_color']; } else { $field['value']['color'] = ''; } } if ( !isset( $field['value']['size'] ) ) { if ( isset( $field['default_size'] ) ) { $field['value']['size'] = $field['default_size']; } else { $field['value']['size'] = ''; } } if ( !isset( $field['value']['style'] ) ) { if ( isset( $field['default_style'] ) ) { $field['value']['style'] = $field['default_style']; } else { $field['value']['style'] = ''; } } if ( !isset( $field['value']['class'] ) ) { $field['value']['class'] = ''; } if ( !isset( $field['value']['page_link'] ) ) { $field['value']['page_link'] = ''; } if ( !isset( $field['value']['type'] ) ) { if ( isset( $field['default_type'] ) ) { $field['value']['type'] = $field['default_type']; } else { $field['value']['type'] = 'page'; } } ?>

What type of content will the button link to?

true, // '_builtin' => false ); $ignore = array( 'page', 'post', 'attachment', 'acf-field', 'acf-field-group' ); $cpts = get_post_types($args, 'objects'); if ( $cpts ) { ?>
name, $ignore ) ) { //exclude $posttypes[] = $cpt->name; } } ?>

'post', 'post_type' => $posttypes, 'posts_per_page' => '-1', 'order' => 'ASC', 'orderby' => 'type title', ); $myposts = get_posts( $args ); ?>
name, $ignore ) ) { //exclude the field type of ACF if ( !isset($field['value'][$cpt->name]) ) { $field['value'][$cpt->name] = ''; } ?>
settings['url']; $version = $this->settings['version']; // register & include JS wp_register_script( 'acf-input-button', "{$url}assets/js/input.js", array('acf-input'), $version ); wp_enqueue_script('acf-input-button'); // register & include CSS wp_register_style( 'acf-input-button', "{$url}assets/css/input.css", array('acf-input'), $version ); wp_enqueue_style('acf-input-button'); } /* * input_admin_head() * * This action is called in the admin_head action on the edit screen where your field is created. * Use this action to add CSS and JavaScript to assist your render_field() action. * * @type action (admin_head) * @since 3.6 * @date 23/01/13 * * @param n/a * @return n/a */ /* function input_admin_head() { } */ /* * input_form_data() * * This function is called once on the 'input' page between the head and footer * There are 2 situations where ACF did not load during the 'acf/input_admin_enqueue_scripts' and * 'acf/input_admin_head' actions because ACF did not know it was going to be used. These situations are * seen on comments / user edit forms on the front end. This function will always be called, and includes * $args that related to the current screen such as $args['post_id'] * * @type function * @date 6/03/2014 * @since 5.0.0 * * @param $args (array) * @return n/a */ /* function input_form_data( $args ) { } */ /* * input_admin_footer() * * This action is called in the admin_footer action on the edit screen where your field is created. * Use this action to add CSS and JavaScript to assist your render_field() action. * * @type action (admin_footer) * @since 3.6 * @date 23/01/13 * * @param n/a * @return n/a */ /* function input_admin_footer() { } */ /* * field_group_admin_enqueue_scripts() * * This action is called in the admin_enqueue_scripts action on the edit screen where your field is edited. * Use this action to add CSS + JavaScript to assist your render_field_options() action. * * @type action (admin_enqueue_scripts) * @since 3.6 * @date 23/01/13 * * @param n/a * @return n/a */ /* function field_group_admin_enqueue_scripts() { } */ /* * field_group_admin_head() * * This action is called in the admin_head action on the edit screen where your field is edited. * Use this action to add CSS and JavaScript to assist your render_field_options() action. * * @type action (admin_head) * @since 3.6 * @date 23/01/13 * * @param n/a * @return n/a */ /* function field_group_admin_head() { } */ /* * load_value() * * This filter is applied to the $value after it is loaded from the db * * @type filter * @since 3.6 * @date 23/01/13 * * @param $value (mixed) the value found in the database * @param $post_id (mixed) the $post_id from which the value was loaded * @param $field (array) the field array holding all the field options * @return $value */ /* function load_value( $value, $post_id, $field ) { return $value; } */ /* * update_value() * * This filter is applied to the $value before it is saved in the db * * @type filter * @since 3.6 * @date 23/01/13 * * @param $value (mixed) the value found in the database * @param $post_id (mixed) the $post_id from which the value was loaded * @param $field (array) the field array holding all the field options * @return $value */ /* function update_value( $value, $post_id, $field ) { return $value; } */ /* * format_value() * * This filter is appied to the $value after it is loaded from the db and before it is returned to the template * * @type filter * @since 3.6 * @date 23/01/13 * * @param $value (mixed) the value which was loaded from the database * @param $post_id (mixed) the $post_id from which the value was loaded * @param $field (array) the field array holding all the field options * * @return $value (mixed) the modified value */ function format_value( $value, $post_id, $field ) { // bail early if no value if( empty($value) || $value['text'] === '' ) { return; } //set defaults $url = ''; $target = ''; $class = 'button'; //get url - if url exists use it, if not use the page id to get permalink. if ( $value['type'] == 'custom' ) { $url = $value['url']; } else { $type = $value['type']; $url = get_permalink( $value[$type] ); } //get target if ( isset($value['target']) && $value['target'] === '_blank' ) { $target = ' target="_blank" '; } //append size classes if ( isset($value['size']) ) { $class .= ' ' . $value['size']; } //append color classes if ( isset($value['color']) ) { $class .= ' ' . $value['color']; } //append style classes if ( isset($value['style']) ) { $class .= ' ' . $value['style']; } //append custom classes if ( isset($value['class']) ) { $class .= ' ' . $value['class']; } $value = '' . $value['text'] . ''; // return return $value; } /* * validate_value() * * This filter is used to perform validation on the value prior to saving. * All values are validated regardless of the field's required setting. This allows you to validate and return * messages to the user if the value is not correct * * @type filter * @date 11/02/2014 * @since 5.0.0 * * @param $valid (boolean) validation status based on the value and the field's required setting * @param $value (mixed) the $_POST value * @param $field (array) the field array holding all the field options * @param $input (string) the corresponding input name for $_POST value * @return $valid */ /* function validate_value( $valid, $value, $field, $input ){ // Basic usage if( $value < $field['custom_minimum_setting'] ) { $valid = false; } // Advanced usage if( $value < $field['custom_minimum_setting'] ) { $valid = __('The value is too little!','acf-button'), } // return return $valid; } */ /* * delete_value() * * This action is fired after a value has been deleted from the db. * Please note that saving a blank value is treated as an update, not a delete * * @type action * @date 6/03/2014 * @since 5.0.0 * * @param $post_id (mixed) the $post_id from which the value was deleted * @param $key (string) the $meta_key which the value was deleted * @return n/a */ /* function delete_value( $post_id, $key ) { } */ /* * load_field() * * This filter is applied to the $field after it is loaded from the database * * @type filter * @date 23/01/2013 * @since 3.6.0 * * @param $field (array) the field array holding all the field options * @return $field */ /* function load_field( $field ) { return $field; } */ /* * update_field() * * This filter is applied to the $field before it is saved to the database * * @type filter * @date 23/01/2013 * @since 3.6.0 * * @param $field (array) the field array holding all the field options * @return $field */ /* function update_field( $field ) { return $field; } */ /* * delete_field() * * This action is fired after a field is deleted from the database * * @type action * @date 11/02/2014 * @since 5.0.0 * * @param $field (array) the field array holding all the field options * @return n/a */ /* function delete_field( $field ) { } */ } // initialize new acf_field_button( $this->settings ); // class_exists check endif; ?>