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; } } }