array($this, 'checkboxCallback'), 'text' => array($this, 'inputCallback'), 'textarea' => array($this, 'textareaCallback'), 'editor' => array($this, 'textEditorCallback'), 'select' => array($this, 'selectCallback'), 'hidden' => array($this, 'hiddenCallback') ); foreach ($settings as $sectionId => $section) { $callback = isset($section['callback']) ? $section['callback'] : null; add_settings_section($sectionId, $section['label'], $callback, $page); if( isset( $section['fields'] ) ){ foreach ( $section['fields'] as $fieldId => $field) { $title = isset($field['title']) ? $field['title'] : ''; $field['label_for'] = $fieldId; $field['option_name'] = $optionName; $field['placeholder'] = isset($field['placeholder']) ? $field['placeholder'] : ''; $field['id'] = isset($field['id']) ? $field['id'] : $fieldId; add_settings_field($fieldId, $title, $callbacks[$field['type']], $page, $sectionId, $field); } } } } public function checkBoxCallback($args) { $checkbox = ''; $checkbox = apply_filters( 'wpc_settings_field_checkbox', $checkbox, $args ); $checked = $this->getOption($args['label_for']); if ($checked == '1') { $checked = 'on'; } printf( $checkbox, esc_attr($args['option_name']), esc_attr($args['label_for']), checked('on', $checked, false), esc_attr($args['id']), esc_html($args['label']) ); if( isset( $args['description'] ) ){ printf( '
%s
', esc_html( $args['description'] ) ); } } public function inputCallback($args) { $input = ''; $class = isset( $args['class'] ) ? $args['class'] : 'regular-text'; if( isset( $args['default'] ) ){ $value = $this->getOption($args['label_for']) ? $this->getOption($args['label_for']) : $args['default']; }else{ $value = $this->getOption($args['label_for']); } $value = trim($value); printf( $input, esc_attr($class), esc_attr($this->optionName), esc_attr($args['label_for']), esc_attr($value), esc_attr($args['placeholder']), esc_attr($args['id']) ); if( isset($args['id']) && $args['id'] === 'posts_container' ){ if( flrt_get_option('enable_ajax') === 'on' && ! $value ){ printf( '%s
', esc_html__( 'You must specify Posts Container, otherwise AJAX will not work properly', 'filter-everything' ) ); } } if( isset( $args['description'] ) ){ printf( '%s
', esc_html( $args['description'] ) ); } } public function hiddenCallback( $args ) { $input = ''; $class = isset( $args['class'] ) ? $args['class'] : 'regular-text'; printf( $input, esc_attr($class), esc_attr($this->optionName), esc_attr($args['label_for']), esc_attr($this->getOption($args['label_for'])), esc_attr($args['placeholder']), esc_attr($args['id']) ); } public function selectCallback($args) { $options = isset($args['options']) ? $args['options'] : []; $class = isset( $args['class'] ) ? $args['class'] : 'filter-settings-select'; $value = $this->getOption($args['label_for']); $multiple = ! empty($args['multiple']) ? 'multiple' : null; $select = ''); if (isset($args['help'])) { printf('%s
', esc_html($args['help'])); } if( isset( $args['description'] ) ){ printf( '%s
', esc_html( $args['description'] ) ); } } public function textareaCallback($args) { $textarea = ''; printf( $textarea, esc_attr($this->optionName), esc_attr($args['label_for']), esc_attr($args['placeholder']), esc_attr($args['id']), esc_textarea( $this->getOption($args['label_for']) ) ); } public function textEditorCallback($args) { wp_editor( $this->getOption( $args['label_for'] ), esc_attr( $args['id'] ), array( 'textarea_name' => esc_attr( $this->optionName . '[' . $args['label_for'] . ']' ) ) ); } public function render() { print(''); } public function doSettingsSections( $page ) { global $wp_settings_sections, $wp_settings_fields; if ( ! isset( $wp_settings_sections[ $page ] ) ) { return; } foreach ( (array) $wp_settings_sections[ $page ] as $section ) { do_action('wpc_before_settings_fields_title', $page ); if ( $section['title'] ) { echo "