field = $field;
$this->value = $value;
$this->unique = $unique;
$this->where = $where;
$this->parent = $parent;
}
public function field_name( $nested_name = '' ) {
$field_id = ( ! empty( $this->field['id'] ) ) ? $this->field['id'] : '';
$unique_id = ( ! empty( $this->unique ) ) ? $this->unique .'['. $field_id .']' : $field_id;
$field_name = ( ! empty( $this->field['name'] ) ) ? $this->field['name'] : $unique_id;
$tag_prefix = ( ! empty( $this->field['tag_prefix'] ) ) ? $this->field['tag_prefix'] : '';
if ( ! empty( $tag_prefix ) ) {
$nested_name = str_replace( '[', '['. $tag_prefix, $nested_name );
}
return $field_name . $nested_name;
}
public function field_attributes( $custom_atts = array() ) {
$field_id = ( ! empty( $this->field['id'] ) ) ? $this->field['id'] : '';
$attributes = ( ! empty( $this->field['attributes'] ) ) ? $this->field['attributes'] : array();
if ( ! empty( $field_id ) && empty( $attributes['data-depend-id'] ) ) {
$attributes['data-depend-id'] = $field_id;
}
if ( ! empty( $this->field['placeholder'] ) ) {
$attributes['placeholder'] = $this->field['placeholder'];
}
$attributes = wp_parse_args( $attributes, $custom_atts );
$atts = '';
if ( ! empty( $attributes ) ) {
foreach ( $attributes as $key => $value ) {
if ( $value === 'only-key' ) {
$atts .= ' '. esc_attr( $key );
} else {
$atts .= ' '. esc_attr( $key ) . '="'. esc_attr( $value ) .'"';
}
}
}
return $atts;
}
public function field_before() {
return ( ! empty( $this->field['before'] ) ) ? '
'. $this->field['before'] .'
' : '';
}
public function field_after() {
$output = ( ! empty( $this->field['after'] ) ) ? ''. $this->field['after'] .'
' : '';
$output .= ( ! empty( $this->field['desc'] ) ) ? ''. $this->field['desc'] .'
' : '';
$output .= ( ! empty( $this->field['help'] ) ) ? ''. $this->field['help'] .'
' : '';
$output .= ( ! empty( $this->field['_error'] ) ) ? ''. $this->field['_error'] .'
' : '';
return $output;
}
public static function field_data( $type = '', $term = false, $query_args = array() ) {
$options = array();
$array_search = false;
// sanitize type name
if ( in_array( $type, array( 'page', 'pages' ) ) ) {
$option = 'page';
} else if ( in_array( $type, array( 'post', 'posts' ) ) ) {
$option = 'post';
} else if ( in_array( $type, array( 'category', 'categories' ) ) ) {
$option = 'category';
} else if ( in_array( $type, array( 'tag', 'tags' ) ) ) {
$option = 'post_tag';
} else if ( in_array( $type, array( 'menu', 'menus' ) ) ) {
$option = 'nav_menu';
} else {
$option = '';
}
// switch type
switch( $type ) {
case 'page':
case 'pages':
case 'post':
case 'posts':
// term query required for ajax select
if ( ! empty( $term ) ) {
$query = new WP_Query( wp_parse_args( $query_args, array(
's' => $term,
'post_type' => $option,
'post_status' => 'publish',
'posts_per_page' => 25,
) ) );
} else {
$query = new WP_Query( wp_parse_args( $query_args, array(
'post_type' => $option,
'post_status' => 'publish',
) ) );
}
if ( ! is_wp_error( $query ) && ! empty( $query->posts ) ) {
foreach ( $query->posts as $item ) {
$options[$item->ID] = $item->post_title;
}
}
break;
case 'category':
case 'categories':
case 'tag':
case 'tags':
case 'menu':
case 'menus':
if ( ! empty( $term ) ) {
$query = new WP_Term_Query( wp_parse_args( $query_args, array(
'search' => $term,
'taxonomy' => $option,
'hide_empty' => false,
'number' => 25,
) ) );
} else {
$query = new WP_Term_Query( wp_parse_args( $query_args, array(
'taxonomy' => $option,
'hide_empty' => false,
) ) );
}
if ( ! is_wp_error( $query ) && ! empty( $query->terms ) ) {
foreach ( $query->terms as $item ) {
$options[$item->term_id] = $item->name;
}
}
break;
case 'user':
case 'users':
if ( ! empty( $term ) ) {
$query = new WP_User_Query( array(
'search' => '*'. $term .'*',
'number' => 25,
'orderby' => 'title',
'order' => 'ASC',
'fields' => array( 'display_name', 'ID' )
) );
} else {
$query = new WP_User_Query( array( 'fields' => array( 'display_name', 'ID' ) ) );
}
if ( ! is_wp_error( $query ) && ! empty( $query->get_results() ) ) {
foreach ( $query->get_results() as $item ) {
$options[$item->ID] = $item->display_name;
}
}
break;
case 'sidebar':
case 'sidebars':
global $wp_registered_sidebars;
if ( ! empty( $wp_registered_sidebars ) ) {
foreach ( $wp_registered_sidebars as $sidebar ) {
$options[$sidebar['id']] = $sidebar['name'];
}
}
$array_search = true;
break;
case 'role':
case 'roles':
global $wp_roles;
if ( ! empty( $wp_roles ) ) {
if ( ! empty( $wp_roles->roles ) ) {
foreach ( $wp_roles->roles as $role_key => $role_value ) {
$options[$role_key] = $role_value['name'];
}
}
}
$array_search = true;
break;
case 'post_type':
case 'post_types':
$post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
if ( ! is_wp_error( $post_types ) && ! empty( $post_types ) ) {
foreach ( $post_types as $post_type ) {
$options[$post_type->name] = $post_type->labels->name;
}
}
$array_search = true;
break;
case 'location':
case 'locations':
$nav_menus = get_registered_nav_menus();
if ( ! is_wp_error( $nav_menus ) && ! empty( $nav_menus ) ) {
foreach ( $nav_menus as $nav_menu_key => $nav_menu_name ) {
$options[$nav_menu_key] = $nav_menu_name;
}
}
$array_search = true;
break;
default:
if ( is_callable( $type ) ) {
if ( ! empty( $term ) ) {
$options = call_user_func( $type, $query_args );
} else {
$options = call_user_func( $type, $term, $query_args );
}
}
break;
}
// Array search by "term"
if ( ! empty( $term ) && ! empty( $options ) && ! empty( $array_search ) ) {
$options = preg_grep( '/'. $term .'/i', $options );
}
// Make multidimensional array for ajax search
if ( ! empty( $term ) && ! empty( $options ) ) {
$arr = array();
foreach ( $options as $option_key => $option_value ) {
$arr[] = array( 'value' => $option_key, 'text' => $option_value );
}
$options = $arr;
}
return $options;
}
public function field_wp_query_data_title( $type, $values ) {
$options = array();
if ( ! empty( $values ) && is_array( $values ) ) {
foreach ( $values as $value ) {
$options[$value] = ucfirst( $value );
switch( $type ) {
case 'post':
case 'posts':
case 'page':
case 'pages':
$title = get_the_title( $value );
if ( ! is_wp_error( $title ) && ! empty( $title ) ) {
$options[$value] = $title;
}
break;
case 'category':
case 'categories':
case 'tag':
case 'tags':
case 'menu':
case 'menus':
$term = get_term( $value );
if ( ! is_wp_error( $term ) && ! empty( $term ) ) {
$options[$value] = $term->name;
}
break;
case 'user':
case 'users':
$user = get_user_by( 'id', $value );
if ( ! is_wp_error( $user ) && ! empty( $user ) ) {
$options[$value] = $user->display_name;
}
break;
case 'sidebar':
case 'sidebars':
global $wp_registered_sidebars;
if ( ! empty( $wp_registered_sidebars[$value] ) ) {
$options[$value] = $wp_registered_sidebars[$value]['name'];
}
break;
case 'role':
case 'roles':
global $wp_roles;
if ( ! empty( $wp_roles ) && ! empty( $wp_roles->roles ) && ! empty( $wp_roles->roles[$value] ) ) {
$options[$value] = $wp_roles->roles[$value]['name'];
}
break;
case 'post_type':
case 'post_types':
$post_types = get_post_types( array( 'show_in_nav_menus' => true ) );
if ( ! is_wp_error( $post_types ) && ! empty( $post_types ) && ! empty( $post_types[$value] ) ) {
$options[$value] = ucfirst( $value );
}
break;
case 'location':
case 'locations':
$nav_menus = get_registered_nav_menus();
if ( ! is_wp_error( $nav_menus ) && ! empty( $nav_menus ) && ! empty( $nav_menus[$value] ) ) {
$options[$value] = $nav_menus[$value];
}
break;
default:
if ( is_callable( $type .'_title' ) ) {
$options[$value] = call_user_func( $type .'_title', $value );
}
break;
}
}
}
return $options;
}
}
}