<?php namespace Aldine; class PageButton extends \WP_Widget { /** * Constructor. * * @see WP_Widget::__construct() * */ public function __construct() { parent::__construct('pagebutton', __('Page Button', 'aldine'), [ 'description' => esc_html__('Add a styled button which links to a page.', 'aldine') ]); } /** * Front-end display of widget. * * @see WP_Widget::widget() * * @param array $args Widget arguments. * @param array $instance Saved values from database. */ public function widget($args, $instance) { echo $args['before_widget']; if (! empty($instance['page_id'])) { if (empty($instance['title'])) { $instance['title'] = get_the_title($instance['page_id']); } printf( '<a class="button" href="%1$s">%2$s</a>', get_permalink($instance['page_id']), apply_filters('widget_title', $instance['title']) ); } echo $args['after_widget']; } /** * Back-end widget form. * * @see WP_Widget::form() * * @param array $instance Previously saved values from database. */ public function form($instance) { $title = ! empty($instance['title']) ? $instance['title'] : ''; $page_id = ! empty($instance['page_id']) ? $instance['page_id'] : ''; ?> <p><label for="<?= esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:', 'aldine'); ?></label> <input class="widefat" id="<?= esc_attr($this->get_field_id('title')); ?>" name="<?= esc_attr($this->get_field_name('title')); ?>" type="text" value="<?= esc_attr($title); ?>"></p> <p><label for="<?= esc_attr($this->get_field_id('page_id')); ?>"><?php _e('Page:', 'aldine'); ?></label> <select id="<?= esc_attr($this->get_field_id('page_id')); ?>" name="<?= esc_attr($this->get_field_name('page_id')); ?>"> <option value="" <?php selected($page_id, ''); ?>> -- </a> <?php $pages = get_pages(); foreach ($pages as $page) { ?> <option value="<?= $page->ID; ?>" <?php selected($page_id, $page->ID); ?>> <?= $page->post_title; ?> </option> <?php } ?> </select></p> <?php } /** * Sanitize widget form values as they are saved. * * @see WP_Widget::update() * * @param array $new_instance Values just sent to be saved. * @param array $old_instance Previously saved values from database. * * @return array Updated safe values to be saved. */ public function update($new_instance, $old_instance) { $instance = []; $instance['title'] = ( ! empty($new_instance['title']) ) ? strip_tags($new_instance['title']) : ''; $instance['page_id'] = ( ! empty($new_instance['page_id']) ) ? absint($new_instance['page_id']) : ''; return $instance; } }