Make WordPress Core

source: tags/6.5/src/wp-includes/widgets/class-wp-widget-pages.php

Last change on this file was 56547, checked in by SergeyBiryukov, 10 months ago

Coding Standards: Remove superfluous blank lines at the end of various classes.

Note: This is enforced by WPCS 3.0.0.

Follow-up to [56536].

Props jrf.
See #59161, #58831.

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1<?php
2/**
3 * Widget API: WP_Widget_Pages class
4 *
5 * @package WordPress
6 * @subpackage Widgets
7 * @since 4.4.0
8 */
9
10/**
11 * Core class used to implement a Pages widget.
12 *
13 * @since 2.8.0
14 *
15 * @see WP_Widget
16 */
17class WP_Widget_Pages extends WP_Widget {
18
19        /**
20         * Sets up a new Pages widget instance.
21         *
22         * @since 2.8.0
23         */
24        public function __construct() {
25                $widget_ops = array(
26                        'classname'                   => 'widget_pages',
27                        'description'                 => __( 'A list of your site&#8217;s Pages.' ),
28                        'customize_selective_refresh' => true,
29                        'show_instance_in_rest'       => true,
30                );
31                parent::__construct( 'pages', __( 'Pages' ), $widget_ops );
32        }
33
34        /**
35         * Outputs the content for the current Pages widget instance.
36         *
37         * @since 2.8.0
38         *
39         * @param array $args     Display arguments including 'before_title', 'after_title',
40         *                        'before_widget', and 'after_widget'.
41         * @param array $instance Settings for the current Pages widget instance.
42         */
43        public function widget( $args, $instance ) {
44                $default_title = __( 'Pages' );
45                $title         = ! empty( $instance['title'] ) ? $instance['title'] : $default_title;
46
47                /**
48                 * Filters the widget title.
49                 *
50                 * @since 2.6.0
51                 *
52                 * @param string $title    The widget title. Default 'Pages'.
53                 * @param array  $instance Array of settings for the current widget.
54                 * @param mixed  $id_base  The widget ID.
55                 */
56                $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
57
58                $sortby  = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby'];
59                $exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude'];
60
61                if ( 'menu_order' === $sortby ) {
62                        $sortby = 'menu_order, post_title';
63                }
64
65                $output = wp_list_pages(
66                        /**
67                         * Filters the arguments for the Pages widget.
68                         *
69                         * @since 2.8.0
70                         * @since 4.9.0 Added the `$instance` parameter.
71                         *
72                         * @see wp_list_pages()
73                         *
74                         * @param array $args     An array of arguments to retrieve the pages list.
75                         * @param array $instance Array of settings for the current widget.
76                         */
77                        apply_filters(
78                                'widget_pages_args',
79                                array(
80                                        'title_li'    => '',
81                                        'echo'        => 0,
82                                        'sort_column' => $sortby,
83                                        'exclude'     => $exclude,
84                                ),
85                                $instance
86                        )
87                );
88
89                if ( ! empty( $output ) ) {
90                        echo $args['before_widget'];
91                        if ( $title ) {
92                                echo $args['before_title'] . $title . $args['after_title'];
93                        }
94
95                        $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';
96
97                        /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
98                        $format = apply_filters( 'navigation_widgets_format', $format );
99
100                        if ( 'html5' === $format ) {
101                                // The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
102                                $title      = trim( strip_tags( $title ) );
103                                $aria_label = $title ? $title : $default_title;
104                                echo '<nav aria-label="' . esc_attr( $aria_label ) . '">';
105                        }
106                        ?>
107
108                        <ul>
109                                <?php echo $output; ?>
110                        </ul>
111
112                        <?php
113                        if ( 'html5' === $format ) {
114                                echo '</nav>';
115                        }
116
117                        echo $args['after_widget'];
118                }
119        }
120
121        /**
122         * Handles updating settings for the current Pages widget instance.
123         *
124         * @since 2.8.0
125         *
126         * @param array $new_instance New settings for this instance as input by the user via
127         *                            WP_Widget::form().
128         * @param array $old_instance Old settings for this instance.
129         * @return array Updated settings to save.
130         */
131        public function update( $new_instance, $old_instance ) {
132                $instance          = $old_instance;
133                $instance['title'] = sanitize_text_field( $new_instance['title'] );
134                if ( in_array( $new_instance['sortby'], array( 'post_title', 'menu_order', 'ID' ), true ) ) {
135                        $instance['sortby'] = $new_instance['sortby'];
136                } else {
137                        $instance['sortby'] = 'menu_order';
138                }
139
140                $instance['exclude'] = sanitize_text_field( $new_instance['exclude'] );
141
142                return $instance;
143        }
144
145        /**
146         * Outputs the settings form for the Pages widget.
147         *
148         * @since 2.8.0
149         *
150         * @param array $instance Current settings.
151         */
152        public function form( $instance ) {
153                // Defaults.
154                $instance = wp_parse_args(
155                        (array) $instance,
156                        array(
157                                'sortby'  => 'post_title',
158    ��                           'title'   => '',
159                                'exclude' => '',
160                        )
161                );
162                ?>
163                <p>
164                        <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:' ); ?></label>
165                        <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( $instance['title'] ); ?>" />
166                </p>
167
168                <p>
169                        <label for="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>"><?php _e( 'Sort by:' ); ?></label>
170                        <select name="<?php echo esc_attr( $this->get_field_name( 'sortby' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>" class="widefat">
171                                <option value="post_title"<?php selected( $instance['sortby'], 'post_title' ); ?>><?php _e( 'Page title' ); ?></option>
172                                <option value="menu_order"<?php selected( $instance['sortby'], 'menu_order' ); ?>><?php _e( 'Page order' ); ?></option>
173                                <option value="ID"<?php selected( $instance['sortby'], 'ID' ); ?>><?php _e( 'Page ID' ); ?></option>
174                        </select>
175                </p>
176
177                <p>
178                        <label for="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>"><?php _e( 'Exclude:' ); ?></label>
179                        <input type="text" value="<?php echo esc_attr( $instance['exclude'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'exclude' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>" class="widefat" />
180                        <br />
181                        <small><?php _e( 'Page IDs, separated by commas.' ); ?></small>
182                </p>
183                <?php
184        }
185}
Note: See TracBrowser for help on using the repository browser.