PATH:
home
/
letacommog
/
rdvenunclick.fr1
/
wp-content
/
plugins
/
acf-extended
/
includes
/
fields
<?php if(!defined('ABSPATH')) exit; if(!class_exists('acfe_field_advanced_link')): class acfe_field_advanced_link extends acf_field{ public $post_object = ''; function __construct(){ $this->name = 'acfe_advanced_link'; $this->label = __('Advanced Link', 'acfe'); $this->category = 'relational'; $this->defaults = array( 'post_type' => array(), 'taxonomy' => array(), ); add_action('wp_ajax_acfe/fields/advanced_link/post_query', array($this, 'ajax_query')); add_action('wp_ajax_nopriv_acfe/fields/advanced_link/post_query', array($this, 'ajax_query')); $this->post_object = acf_get_field_type('post_object'); remove_action('acf/render_field/type=post_object', array($this->post_object, 'render_field'), 9); add_action('acf/render_field/type=post_object', array($this, 'post_object_render_field'), 9); parent::__construct(); } function post_object_render_field($field){ // Change Field into a select $field['type'] = 'select'; $field['ui'] = 1; $field['ajax'] = 1; $field['choices'] = array(); // load posts $posts = $this->post_object->get_posts( $field['value'], $field ); if($posts){ foreach( array_keys($posts) as $i ) { // vars $post = acf_extract_var( $posts, $i ); // append to choices $field['choices'][ $post->ID ] = $this->post_object->get_post_title( $post, $field ); } } if(acf_maybe_get($field, '_name') === 'post' && !empty($field['value']) && !is_array($field['value']) && !is_numeric($field['value'])){ $post_type = $field['value']; $post_type_label = acf_get_post_type_label($post_type); $field['choices'][$field['value']] = $post_type_label . ' Archive'; } // render acf_render_field( $field ); } function ajax_query(){ // validate if(!acf_verify_ajax()) die(); // get choices $response = $this->post_object->get_ajax_query($_POST); $options = acf_parse_args($_POST, array( 'post_id' => 0, 's' => '', 'field_key' => '', 'paged' => 1 )); $field = acf_get_field($options['field_key']); if(!$field) return false; if($options['paged'] > 1) acf_send_ajax_results($response); // init archives $s = false; $is_search = false; if($options['s'] !== ''){ $s = wp_unslash(strval($options['s'])); $is_search = true; } if(!empty($field['post_type'])){ $post_types = acf_get_array($field['post_type']); }else{ $post_types = acf_get_post_types(); } $post_types_archives = array(); foreach($post_types as $post_type){ $post_type_obj = get_post_type_object($post_type); $has_archive = false; if($post_type === 'post' || $post_type_obj->has_archive){ $has_archive = true; } if(!$has_archive) continue; $post_type_label = acf_get_post_type_label($post_type); if($is_search && stripos($post_type_label, $s) === false) continue; $post_types_archives[] = array( 'id' => $post_type, 'text' => $post_type_label . ' Archive' ); } if(!empty($post_types_archives)){ if(!isset($response['results'])){ $response['results'] = array(); } array_unshift($response['results'], array( 'text' => 'Archives', 'children' => $post_types_archives )); } // return acf_send_ajax_results($response); } function render_field_settings($field){ // Filter Post Type acf_render_field_setting($field, array( 'label' => __('Filter by Post Type','acf'), 'instructions' => '', 'type' => 'select', 'name' => 'post_type', 'choices' => acf_get_pretty_post_types(), 'multiple' => 1, 'ui' => 1, 'allow_null' => 1, 'placeholder' => __("All post types",'acf'), )); // Filter Taxonomy acf_render_field_setting($field, array( 'label' => __('Filter by Taxonomy','acf'), 'instructions' => '', 'type' => 'select', 'name' => 'taxonomy', 'choices' => acf_get_taxonomy_terms(), 'multiple' => 1, 'ui' => 1, 'allow_null' => 1, 'placeholder' => __("All taxonomies",'acf'), )); $field_name = 'field_name'; if(acf_maybe_get($field, 'name')) $field_name = $field['name']; ob_start(); ?> Add your own sub fields using the following hook:<br /><br /> <pre> add_filter('acfe/fields/advanced_link/sub_fields/name=<?php echo $field_name; ?>', 'my_acf_advanced_link_sub_fields', 10, 3); function my_acf_advanced_link_sub_fields($sub_fields, $field, $value){ /** * @array $sub_fields Sub fields array * @array $field Advanced Link field * @array $value Advanced Link values */ $sub_fields[] = array( 'name' => 'my_field', 'label' => 'My field', 'type' => 'true_false', 'ui' => true ); return $sub_fields; } </pre> <?php $message = ob_get_clean(); // field_type acf_render_field_setting($field, array( 'label' => __('Custom sub fields','acf'), 'instructions' => '', 'type' => 'message', 'name' => 'instructions', 'message' => $message, 'new_lines' => false )); } function get_value($value = array()){ // vars $value = wp_parse_args($value, array( 'type' => 'url', 'post' => '', 'term' => '', 'title' => '', 'url' => false, 'url_title' => '', 'target' => false, )); $value['url_title'] = $value['url']; // Post if($value['type'] === 'post' && !empty($value['post'])){ if(is_numeric($value['post'])){ $value['url'] = get_permalink($value['post']); $value['url_title'] = get_the_title($value['post']); }else{ $post_type = $value['post']; $value['url'] = get_post_type_archive_link($post_type); $value['url_title'] = acf_get_post_type_label($post_type) . ' Archive'; } // Term }elseif($value['type'] === 'term' && !empty($value['term'])){ $term = get_term(intval($value['term'])); $value['url'] = get_term_link($term); $value['url_title'] = $term->name; } // Target if(!empty($value['target'])){ $value['target'] = '_blank'; } // return return $value; } function render_field($field){ // vars $div = array( 'id' => $field['id'], 'class' => $field['class'] . ' acf-link', ); // get link $value = $this->get_value($field['value']); // classes if($value['url']){ $div['class'] .= ' -value'; } if($value['target'] === '_blank'){ $div['class'] .= ' -external'; } $sub_fields = array( array( 'name' => 'type', 'key' => 'type', 'label' => __('Type', 'acf'), 'type' => 'radio', 'required' => false, 'class' => 'input-type', 'choices' => array( 'url' => __('URL', 'acf'), 'post' => __('Post', 'acf'), 'term' => __('Term', 'acf'), ), ), array( 'name' => 'url', 'key' => 'url', 'label' => __('URL', 'acf'), 'type' => 'text', 'required' => false, 'class' => 'input-url', 'conditional_logic' => array( array( array( 'field' => 'type', 'operator' => '==', 'value' => 'url', ) ) ) ), array( 'name' => 'post', 'key' => 'post', 'label' => __('Post', 'acf'), 'type' => 'post_object', 'required' => false, 'class' => 'input-post', 'allow_null' => 0, 'ajax_action' => 'acfe/fields/advanced_link/post_query', 'conditional_logic' => array( array( array( 'field' => 'type', 'operator' => '==', 'value' => 'post', ) ) ) ), array( 'name' => 'term', 'key' => 'term', 'label' => __('Term', 'acf'), 'type' => 'acfe_taxonomy_terms', 'required' => false, 'class' => 'input-term', 'field_type' => 'select', 'return_format' => 'id', 'ui' => 1, 'allow_null' => 0, 'conditional_logic' => array( array( array( 'field' => 'type', 'operator' => '==', 'value' => 'term', ) ) ) ), array( 'name' => 'title', 'key' => 'title', 'label' => __('Link text', 'acf'), 'type' => 'text', 'required' => false, 'class' => 'input-title', ), array( 'name' => 'target', 'key' => 'target', 'label' => __('Target', 'acf'), 'type' => 'true_false', 'message' => __('Open in an new window', 'acf'), 'required' => false, 'class' => 'input-target', ), ); // Deprecated $sub_fields = apply_filters_deprecated('acfe/fields/advanced_link/fields', array($sub_fields, $field, $value), '0.8.1', 'acfe/fields/advanced_link/sub_fields'); $sub_fields = apply_filters_deprecated('acfe/fields/advanced_link/fields/name=' . $field['_name'], array($sub_fields, $field, $value), '0.8.1', 'acfe/fields/advanced_link/sub_fields/name=' . $field['_name']); $sub_fields = apply_filters_deprecated('acfe/fields/advanced_link/fields/key=' . $field['key'], array($sub_fields, $field, $value), '0.8.1', 'acfe/fields/advanced_link/sub_fields/key=' . $field['key']); // Sub Fields Fitlers $sub_fields = apply_filters('acfe/fields/advanced_link/sub_fields', $sub_fields, $field, $value); $sub_fields = apply_filters('acfe/fields/advanced_link/sub_fields/name=' . $field['_name'], $sub_fields, $field, $value); $sub_fields = apply_filters('acfe/fields/advanced_link/sub_fields/key=' . $field['key'], $sub_fields, $field, $value); foreach($sub_fields as &$sub_field){ $sub_field['prefix'] = $field['name']; $sub_field['value'] = isset($value[$sub_field['name']]) ? $value[$sub_field['name']] : ''; $sub_field = acf_validate_field($sub_field); $sub_field = acf_prepare_field($sub_field); } ?> <div <?php acf_esc_attr_e($div); ?>> <div class="acfe-modal" data-modal-title="<?php echo $field['label']; ?>"> <div class="acfe-modal-wrapper"> <div class="acfe-modal-content"> <div class="acf-fields acf-form-fields -left"> <?php acf_render_fields($sub_fields, false, 'div', 'label'); ?> </div> </div> </div> </div> <a href="#" class="button" data-name="add" target=""><?php _e('Select Link', 'acf'); ?></a> <div class="link-wrap"> <span class="link-title"><?php echo esc_html($value['title']); ?></span> <a class="link-url" href="<?php echo esc_url($value['url']); ?>" target="_blank"><?php echo esc_html($value['url_title']); ?></a> <i class="acf-icon -link-ext acf-js-tooltip" title="<?php _e('Opens in a new window/tab', 'acf'); ?>"></i><?php ?><a class="acf-icon -pencil -clear acf-js-tooltip" data-name="edit" href="#" title="<?php _e('Edit', 'acf'); ?>"></a><?php ?><a class="acf-icon -cancel -clear acf-js-tooltip" data-name="remove" href="#" title="<?php _e('Remove', 'acf'); ?>"></a> </div> </div> <?php } function format_value($value, $post_id, $field){ // get value $value = $this->get_value($value); // clean acfe_unset($value, 'type'); acfe_unset($value, 'post'); acfe_unset($value, 'term'); acfe_unset($value, 'url_title'); return $value; } function validate_value($valid, $value, $field, $input){ // bail early if not required if(!$field['required']) return $valid; // URL is required if(empty($value)) return false; if((acf_maybe_get($value, 'type') === 'url' && !acf_maybe_get($value, 'url')) || (acf_maybe_get($value, 'type') === 'post' && !acf_maybe_get($value, 'post')) || (acf_maybe_get($value, 'type') === 'term' && !acf_maybe_get($value, 'term'))) return false; // return return $valid; } } // initialize acf_register_field_type('acfe_field_advanced_link'); endif;
[+]
..
[-] field-hidden.php
[edit]
[-] field-column.php
[edit]
[-] field-group.php
[edit]
[-] field-advanced-link.php
[edit]
[-] field-checkbox.php
[edit]
[-] field-taxonomies.php
[edit]
[-] field-post-statuses.php
[edit]
[-] field-post-types.php
[edit]
[-] field-button.php
[edit]
[-] field-dynamic-message.php
[edit]
[-] field-clone.php
[edit]
[-] field-slug.php
[edit]
[-] field-flexible-content.php
[edit]
[-] field-recaptcha.php
[edit]
[-] field-image.php
[edit]
[-] field-file.php
[edit]
[-] field-select.php
[edit]
[-] field-textarea.php
[edit]
[-] field-taxonomy-terms.php
[edit]
[-] field-repeater.php
[edit]
[-] field-user-roles.php
[edit]
[-] field-code-editor.php
[edit]
[-] field-post-object.php
[edit]
[-] field-forms.php
[edit]