Intereting Posts
$ wpdb-> update не обновляет поле в базе данных Обновление wpdb в wordpress с помощью json добавляет дополнительные элементы массива Перемещение с одного узла на другой – невозможно получить доступ к панели управления Преобразование комментариев в пользовательский тип сообщения Измените текст «Разрешить комментарии» для экрана редактирования admin для пользовательского типа сообщений? Как я могу выборочно вставлять заголовок для моей страницы магазина в woocommerce? Выведите параметр aria-labelledby для дочернего меню навигационного меню update_post_meta не работает в цикле Как получить мета-заголовок страницы, настроенной как блог (цикл) грубая силовая атака, хотя она ограничена IP Должен ли я очистить кеш-память для кэширования? Как выбрать отдельную категорию в меню, если почта имеет две категории? Проверьте функцию functions.php, если функция существует в footer.php получать мета значение из запроса страницы 404 ошибок в журнале, показывающих URL-адреса с «GET», плюс и числовой код

Создание виджета с несколькими настраиваемыми полями

Я пытаюсь создать некоторые пользовательские виджеты.

Я создал один, для которого требуется только другое поле заголовка. Однако я теперь застреваю при попытке создать виджет, который позволяет мне иметь несколько полей. Мне нужны следующие поля для виджета:

  • заглавие
  • Текст введения
  • Основной текст
  • Адрес электронной почты

Я хочу, чтобы форма виджетов позволяла пользователю обновлять поля выше с помощью текста. Затем я хочу вывести текст, который они написали в моем боковом виджете.

У меня есть следующий код, который для предыдущего виджета, который я сделал (без дополнительных полей, кроме названия)

class registercv_widget extends WP_Widget { function __construct() { parent::__construct( 'registercv_widget', __('Register CV Widget', 'registercv_widget_domain'), array( 'description' => __( 'Provides a "Register CV" button which launches a pop-up', 'registercv_widget_domain' ), ) ); } public function widget( $args, $instance ) { $title = apply_filters( 'widget_title', $instance['title'] ); echo $args['before_widget']; echo '<div class="widget-wrapper">'; if ( ! empty( $title ) ) echo $args['before_title'] . $title . $args['after_title']; // This is where you run the code and display the output echo __( '<div class="register-button"><span><div class="button white">Send your CV</div></span></div>', 'registercv_widget_domain' ); echo '</div>'; echo $args['after_widget']; } // Widget Backend public function form( $instance ) { if ( isset( $instance[ 'title' ] ) ) { $title = $instance[ 'title' ]; } else { $title = __( 'Register as a candidate', 'registercv_widget_domain' ); } // Widget admin form ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php } // Updating widget replacing old instances with new public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; return $instance; } } function registercv_load_widget() { register_widget( 'registercv_widget' ); } add_action( 'widgets_init', 'registercv_load_widget' ); 

Это прекрасно работает, но как я могу добавить дополнительные поля к этому?

Я попытался скопировать все экземпляры $title и сделать их снова, но с помощью $text_one но я не понимаю, как это поле регистрируется. Может ли кто-нибудь помочь?

Я предполагаю, что вы хотите добавить дополнительные пользовательские поля в форму конца виджета, для этого вам просто нужно создать новое поле в form( $instance ); функция.

Таким образом, код будет выглядеть так:

  // Widget Backend public function form( $instance ) { if ( isset( $instance[ 'title' ] ) ) { $title = $instance[ 'title' ]; } else { $title = __( 'Register as a candidate', 'registercv_widget_domain' ); } if ( isset( $instance[ 'name' ] ) ) { $name = $instance[ 'name' ]; } else { $name = __( 'Enter your name', 'registercv_widget_domain' ); } // Widget admin form ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'name' ); ?>"><?php _e( 'Name:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'name' ); ?>" name="<?php echo $this->get_field_name( 'name' ); ?>" type="text" value="<?php echo esc_attr( $name ); ?>" /> </p> <?php } 

Вышеприведенный код создаст новое поле в форме. Затем нам нужно будет сохранить / обновить значение этого нового поля в базе данных, следуя приведенному ниже коду:

 // Updating widget replacing old instances with new public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; $instance['name'] = ( ! empty( $new_instance['name'] ) ) ? strip_tags( $new_instance['name'] ) : ''; return $instance; }