<?php defined( 'ABSPATH' ) || die; /** * The autocomplete field. */ class RWMB_Autocomplete_Field extends RWMB_Multiple_Values_Field { public static function admin_enqueue_scripts() { wp_enqueue_style( 'rwmb-autocomplete', RWMB_CSS_URL . 'autocomplete.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-autocomplete', 'path', RWMB_CSS_DIR . 'autocomplete.css' ); wp_enqueue_script( 'rwmb-autocomplete', RWMB_JS_URL . 'autocomplete.js', [ 'jquery-ui-autocomplete' ], RWMB_VER, true ); RWMB_Helpers_Field::localize_script_once( 'rwmb-autocomplete', 'RWMB_Autocomplete', [ 'delete' => __( 'Delete', 'meta-box' ), ] ); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * @return string */ public static function html( $meta, $field ) { if ( ! is_array( $meta ) ) { $meta = [ $meta ]; } // Filter out empty values in case the array started with empty or 0 values $meta = array_filter( $meta, function ( $index ) use ( $meta ) { return $meta[ $index ] !== ''; }, ARRAY_FILTER_USE_KEY ); $field = apply_filters( 'rwmb_autocomplete_field', $field, $meta ); $options = $field['options']; if ( is_array( $field['options'] ) ) { $options = []; foreach ( $field['options'] as $value => $label ) { $options[] = [ 'value' => (string) $value, 'label' => $label, ]; } $options = wp_json_encode( $options ); } // Input field that triggers autocomplete. // This field doesn't store field values, so it doesn't have "name" attribute. // The value(s) of the field is store in hidden input(s). See below. $html = sprintf( '<input type="text" class="rwmb-autocomplete-search"> <input type="hidden" name="%s" class="rwmb-autocomplete" data-options="%s" disabled>', esc_attr( $field['field_name'] ), esc_attr( $options ) ); $html .= '<div class="rwmb-autocomplete-results">'; // Each value is displayed with label and 'Delete' option. // The hidden input has to have ".rwmb-*" class to make clone work. $tpl = ' <div class="rwmb-autocomplete-result"> <div class="label">%s</div> <div class="actions">%s</div> <input type="hidden" class="rwmb-autocomplete-value" name="%s" value="%s"> </div> '; if ( is_array( $field['options'] ) ) { foreach ( $field['options'] as $value => $label ) { if ( ! in_array( $value, $meta ) ) { continue; } $html .= sprintf( $tpl, esc_html( $label ), esc_html__( 'Delete', 'meta-box' ), esc_attr( $field['field_name'] ), esc_attr( $value ) ); } } else { $meta = array_filter( $meta ); foreach ( $meta as $value ) { $label = apply_filters( 'rwmb_autocomplete_result_label', $value, $field ); $html .= sprintf( $tpl, esc_html( $label ), esc_html__( 'Delete', 'meta-box' ), esc_attr( $field['field_name'] ), esc_attr( $value ) ); } } $html .= '</div>'; // .rwmb-autocomplete-results. return $html; } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
autocomplete.php | File | 2.94 KB | 0644 |
|
background.php | File | 5.32 KB | 0644 |
|
button-group.php | File | 1.84 KB | 0644 |
|
button.php | File | 1.26 KB | 0644 |
|
checkbox-list.php | File | 468 B | 0644 |
|
checkbox.php | File | 1.25 KB | 0644 |
|
choice.php | File | 1.84 KB | 0644 |
|
color.php | File | 2.48 KB | 0644 |
|
custom-html.php | File | 602 B | 0644 |
|
date.php | File | 611 B | 0644 |
|
datetime.php | File | 9.83 KB | 0644 |
|
divider.php | File | 609 B | 0644 |
|
fieldset-text.php | File | 3.36 KB | 0644 |
|
file-input.php | File | 1.93 KB | 0644 |
|
file-upload.php | File | 1.09 KB | 0644 |
|
file.php | File | 15.39 KB | 0644 |
|
heading.php | File | 678 B | 0644 |
|
icon.php | File | 8.4 KB | 0644 |
|
image-advanced.php | File | 2.35 KB | 0644 |
|
image-select.php | File | 2.32 KB | 0644 |
|
image-upload.php | File | 880 B | 0644 |
|
image.php | File | 4.78 KB | 0644 |
|
input-list.php | File | 2.62 KB | 0644 |
|
input.php | File | 2.95 KB | 0644 |
|
key-value.php | File | 2.86 KB | 0644 |
|
map.php | File | 6.36 KB | 0644 |
|
media.php | File | 6.85 KB | 0644 |
|
multiple-values.php | File | 1.33 KB | 0644 |
|
number.php | File | 910 B | 0644 |
|
object-choice.php | File | 4.37 KB | 0644 |
|
oembed.php | File | 4.05 KB | 0644 |
|
osm.php | File | 5.11 KB | 0644 |
|
password.php | File | 537 B | 0644 |
|
post.php | File | 7.18 KB | 0644 |
|
radio.php | File | 270 B | 0644 |
|
range.php | File | 1.51 KB | 0644 |
|
select-advanced.php | File | 2.39 KB | 0644 |
|
select-tree.php | File | 1.51 KB | 0644 |
|
select.php | File | 2.49 KB | 0644 |
|
sidebar.php | File | 1.22 KB | 0644 |
|
single-image.php | File | 1.73 KB | 0644 |
|
slider.php | File | 2.28 KB | 0644 |
|
switch.php | File | 2.32 KB | 0644 |
|
taxonomy-advanced.php | File | 2.84 KB | 0644 |
|
taxonomy.php | File | 9.08 KB | 0644 |
|
text-list.php | File | 3.36 KB | 0644 |
|
textarea.php | File | 1.57 KB | 0644 |
|
time.php | File | 938 B | 0644 |
|
user.php | File | 5.03 KB | 0644 |
|
video.php | File | 3.94 KB | 0644 |
|
wysiwyg.php | File | 2.28 KB | 0644 |
|