Tags()
Description #
The Tags type field object.
Source #
File: lib/form/class-tags.php
class Tags extends Field {
/**
* The field type.
*
* @var string
*/
public $type = 'tags';
/**
* Prepare field.
*
* @return void
*/
protected function prepare() {
$this->args = wp_parse_args(
$this->args,
array(
'label' => __( 'AnsPress Tags Field', 'anspress-question-answer' ),
'array_max' => 3,
'array_min' => 2,
'terms_args' => array(
'taxonomy' => 'question_tag',
'hide_empty' => false,
'fields' => 'id=>name',
),
'options' => 'terms',
'js_options' => array(),
)
);
$js_options = array(
'maxItems' => $this->args['array_max'],
'form' => $this->form_name,
'id' => $this->id(),
'field' => $this->original_name,
'nonce' => wp_create_nonce( 'tags_' . $this->form_name . $this->original_name ),
'create' => false,
'labelAdd' => __( 'Add', 'anspress-question-answer' ),
);
$this->args['js_options'] = wp_parse_args( $this->args['js_options'], $js_options );
// Call parent prepare().
parent::prepare();
// Make sure field is sanitized.
$this->sanitize_cb = array_merge( array( 'array_remove_empty', 'tags_field' ), $this->sanitize_cb );
$this->validate_cb = array_merge( array( 'is_array', 'array_max', 'array_min' ), $this->validate_cb );
}
/**
* Arguments passed to sanitization callback.
*
* @param mixed $val Value to sanitize.
* @return array
*/
protected function sanitize_cb_args( $val ) {
return array( $val, $this->args );
}
/**
* Return options of a tags field.
*
* @return array
* @since 4.1.8 Use `include` args only if value is not empty.
*/
private function get_options() {
$options = $this->get( 'options' );
if ( is_string( $options ) && 'terms' === $options ) {
$options = array();
if ( ! empty( $this->value() ) ) {
$value = $this->value();
$tax_args = array(
'taxonomy' => $this->get( 'terms_args.taxonomy' ),
'hide_empty' => false,
'count' => true,
'number' => 20,
);
if ( ! empty( $value ) ) {
$tax_args['include'] = $value;
}
$terms = get_terms( $tax_args );
if ( $terms ) {
foreach ( $terms as $tag ) {
$options[] = array(
'term_id' => $tag->term_id,
'name' => $tag->name,
'description' => $tag->description,
'count' => $tag->count,
);
}
}
}
return $options;
} elseif ( is_string( $options ) && 'posts' === $options ) {
return wp_list_pluck( get_posts( $this->get( 'posts_args', array() ) ), 'post_title', 'ID' );
}
return array();
}
/**
* Field markup.
*
* @return void
*/
public function field_markup() {
parent::field_markup();
$options = $this->get_options();
$value = ! empty( $this->value() ) ? implode( ',', $this->value() ) : '';
$type = is_string( $options ) ? $options : 'tags';
$this->add_html( '<input type="text" id="' . $this->id() . '" data-type="' . $type . '" data-options="' . esc_js( wp_json_encode( $this->get( 'js_options' ) ) ) . '" class="ap-tags-input" autocomplete="off" aptagfield' . $this->custom_attr() . ' name="' . esc_attr( $this->field_name ) . '" value="' . $value . '" />' );
$this->add_html( '<script id="' . $this->id() . '-options" type="application/json">' . wp_json_encode( $options ) . '</script>' );
/** This action is documented in lib/form/class-input.php */
do_action_ref_array( 'ap_after_field_markup', array( &$this ) );
}
/**
* Get POST (unsafe) value of a field.
*
* @return mixed
*/
public function unsafe_value() {
$request_value = $this->get( ap_to_dot_notation( $this->field_name ), null, $_REQUEST ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( isset( $request_value ) ) {
return explode( ',', wp_unslash( $request_value ) );
}
}
}
Expand full source code Collapse full source code View on GitHub: lib/form/class-tags.php:27
Add your comment