2015-08-06 2 views
1

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

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

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

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

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

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, но я не понимаю, как это поле регистрируется. Может ли кто-нибудь помочь?

+1

Вы когда-нибудь получали ответ? У меня есть аналогичный вопрос в отношении формы, которую я думал о запросе, но если вы нашли решение, я бы просто поддержал ваши вопросы и ответы. –

+0

@Darth_Vader просто добавил мой ответ для вас, надеюсь, что это поможет! – Francesca

+0

приятный ответ +1. это то, что я выяснил, но мне любопытно узнать, есть ли лучший подход к экземпляру, если вы принимаете теги: [экземпляры обновления виджета Wordpress для элементов, которым нужны теги] (http://stackoverflow.com/ вопросы/32620936/WordPress-виджет-ДОПОЛНЕНО экземпляры в обмен на предметы, которые-потребность-теги) –

ответ

1

Найдено решение.

Я начал с приведенным выше кодом и был в состоянии создать несколько полей, как например:

echo $args['before_widget']; 
     echo '<div class="widget-wrapper">'; 
     if (! empty($title)) 
      echo $args['before_title'] . $title . $args['after_title']; 
     if (! empty($text_two)) 
      echo '<p>' . $text_two . '</p>'; 
     if (! empty($link_text)) 
      echo '<p><a href="/employers/executives">' . $link_text . '</a><i class="fa fa-play"></i></p>'; 
     echo '</div>'; 
     echo $args['after_widget']; 

Приведенный выше пример использует $text_two и $link_text переменных, которые могут быть установлены через экран виджета с использованием следующих :

public function form($instance) { 
     if (isset($instance[ 'title' ])) { 
      $title = $instance[ 'title' ]; 
     } 
     else { 
      $title = __('Executive Search', 'executive_widget_domain'); 
     } 

     if (isset($instance[ 'text_two' ])) { 
      $text_two = $instance[ 'text_two' ]; 
     } 
     else { 
      $text_two = __('Systematic searching to map the right talent for Director level roles using the best possible sector intelligence.', 'executive_widget_domain'); 
     } 

     if (isset($instance[ 'link_text' ])) { 
      $link_text = $instance[ 'link_text' ]; 
     } 
     else { 
      $link_text = __('Visit Executive Search', 'executive_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); ?>" /> 
      <br /><br /> 
      <label for="<?php echo $this->get_field_id('text_two'); ?>"><?php _e('Main text:'); ?></label> 
      <input class="widefat" id="<?php echo $this->get_field_id('text_two'); ?>" name="<?php echo $this->get_field_name('text_two'); ?>" type="text" value="<?php echo esc_attr($text_two); ?>" /> 
      <br /><br /> 
      <label for="<?php echo $this->get_field_id('link_text'); ?>"><?php _e('Link text'); ?></label> 
      <input class="widefat" id="<?php echo $this->get_field_id('link_text'); ?>" name="<?php echo $this->get_field_name('link_text'); ?>" type="text" value="<?php echo esc_attr($link_text); ?>" /> 
     </p> 
    <?php 
    } 

Весь фрагмент кода, который может быть введен непосредственно в ваш проект. http://pastebin.com/X7wXmcds

Размещение выше код в functions.php даст вам виджет под названием Executive Search. It has three fields: название , text_two (a simple text string) and ссылка Text`. Таким образом, это три поля, которые пользователь может добавить.

Смежные вопросы