Υλοποίηση του 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;
}