Υλοποίηση του widget
Η υλοποίηση αφορά κώδικα για κάθε μέθοδο.
Ο δημιουργός __construct()
Για την αρχικοποίηση ο δημιουργός καλεί τον δημιουργό της γονικής κλάσης με τα τρία βασικά ορίσματα που χρειάζεται και είναι: ο κωδικός, το όνομα και η περιγραφή.
public function __construct() { parent::__construct( 'cool_widget_id', // αναγνωριστικό για εσωτερική χρήση 'Cool Widget Name', // όνομα που βλέπει ο διαχειριστής array('description' => __('Cool First Widget Description', 'cool_domain'), ) //περιγραφή όπως θα φαίνεται στον διαχειριστή ); }
Η widget
Κάνει echo κάποιο περιεχόμενο (content). Σε μια απλή μορφή (με στατικό περιεχόμενο) θα ήταν κάπως έτσι:
public function widget($args, $instance) { echo '<h1>Hello from My Widget</h1>'; }
Στην αναπτυγμένη της μορφή είναι έτσι:
// Ορισμός τιμών μεταβλητών για την widget public $args = array( 'before_title' => '<h4 class="widgettitle">', 'after_title' => '</h4>', 'before_widget' => '<div class="widget-wrap">', 'after_widget' => '</div>' ); public function widget($args, $instance) { echo $args['before_widget']; //εισαγωγή του 'title' μετά από κάποιους ελέγχους if(!empty($instance['title'])) { echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title']; } echo '<div class="coolwidget">'; //εισαγωγή του 'text' μετά από κάποιους ελέγχους echo esc_html__($instance['text'], 'cool_domain'); echo '</div>'; echo $args['after_widget']; }
Αρχικά ορίζεται ο πίνακας $args με τις σχετικές ετικέτες και κλάσεις.
Η widget εκτελεί μια σειρά από echo εντολές οι οποίες μπορεί να περιέχουν και τα στοιχεία του $instance τα οποία στο παράδειγμα είναι:
- $instance['title']
- $instance['text']
Η form($instance)
Είναι η φόρμα που εμείς έχουμε σχεδιάσει για τον διαχειριστή μέσα από την οποία θα καταχωρήσει τα απαραίτητα δεδομένα.
Θα χρειαστεί να έχει πρόσβαση στον πίνακα $instance και στα στοιχεία που περιέχει.
Στην αναπτυγμένη του μορφή είναι όπως παρακάτω:
public function form($instance) { $title = !empty($instance['title']) ? $instance['title'] : esc_html__('', 'cool_domain'); $text = !empty($instance['text']) ? $instance['text'] : esc_html__('', 'cool_domain'); ?> <p> <label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php echo esc_html__('Title:', 'cool_domain'); ?></label> <input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>"> </p> <p> <label for="<?php echo esc_attr($this->get_field_id('Text')); ?>"><?php echo esc_html__('Text:', 'cool_domain'); ?></label> <textarea class="widefat" id="<?php echo esc_attr($this->get_field_id('text')); ?>" name="<?php echo esc_attr($this->get_field_name('text')); ?>" type="text" cols="30" rows="10"><?php echo esc_attr($text); ?></textarea> </p> <?php }
Η update($new_instance, $old_instance)
Η update αναλαμβάνει να ενημερώσει τη βάση δεδομένων για τις πιθανές αλλαγές. Χρειάζεται τις παλιές τιμές $old_instance και τις ενημερωμένες $new_instance.
Στην αναπτυγμένη του μορφή είναι όπως παρακάτω:
public function update($new_instance, $old_instance) { $instance = array(); $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; $instance['text'] = (!empty($new_instance['text'])) ? $new_instance['text'] : ''; return $instance; }
Περισσότερα options
Στη form μπορούμε να προσθέσουμε και άλλα στοιχεία ή options. Για παράδειγμα:
$check = !empty($instance['check']) ? $instance['check'] : esc_html__('', 'cool_domain');
Στην περίπτωση αυτή θα πρέπει να γίνεται ενημέρωση της τιμής $check μέσα από την update όπως φαίνεται παρακάτω. Επίσης η τιμή της μπορεί να γίνεται echo από την widget.
Παράδειγμα για update με περισσότερα options
public function update($new_instance, $old_instance) { $instance = array(); $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; $instance['text'] = (!empty($new_instance['text'])) ? $new_instance['text'] : ''; $instance['check'] = (!empty($new_instance['check'])) ? $new_instance['check'] : ''; return $instance; }