WordPress.org

Make WordPress Core

Ticket #8673: add-to-functions.php

File add-to-functions.php, 2.6 KB (added by MikeLittle, 5 years ago)

Trivial example of overriding Walker_Page and Walker_PageDropdown

Line 
1<?php
2class zed1ExamplePageWalker extends Walker_Page {
3
4    // the only thing we are going to override is the bit that outputs the links start_el
5
6        /**
7         * @see Walker::start_el()
8         * @since 2.1.0
9         *
10         * @param string $output Passed by reference. Used to append additional content.
11         * @param object $page Page data object.
12         * @param int $depth Depth of page. Used for padding.
13         * @param int $current_page Page ID.
14         * @param array $args
15         */
16        function start_el(&$output, $page, $depth, $args, $current_page) {
17                if ( $depth )
18                        $indent = str_repeat("\t", $depth);
19                else
20                        $indent = '';
21
22                extract($args, EXTR_SKIP);
23                $css_class = 'page_item page-item-'.$page->ID;
24                if ( !empty($current_page) ) {
25                        $_current_page = get_page( $current_page );
26                        if ( isset($_current_page->ancestors) && in_array($page->ID, (array) $_current_page->ancestors) )
27                                $css_class .= ' current_page_ancestor';
28                        if ( $page->ID == $current_page )
29                                $css_class .= ' current_page_item';
30                        elseif ( $_current_page && $page->ID == $_current_page->post_parent )
31                                $css_class .= ' current_page_parent';
32                } elseif ( $page->ID == get_option('page_for_posts') ) {
33                        $css_class .= ' current_page_parent';
34                }
35
36                $output .= $indent . '<li class="' . $css_class . '"><a href="' . get_page_link($page->ID) . '" title="' . attribute_escape(apply_filters('the_title', $page->post_title)) . '">' . $link_before . apply_filters('the_title', $page->post_title) . ' ZED1 ' . $link_after . '</a>';
37
38                if ( !empty($show_date) ) {
39                        if ( 'modified' == $show_date )
40                                $time = $page->post_modified;
41                        else
42                                $time = $page->post_date;
43
44                        $output .= " " . mysql2date($date_format, $time);
45                }
46    }
47
48
49} // end class zed1ExamplePageWalker
50
51class zed1ExampleDropdownPageWalker extends Walker_PageDropdown {
52
53    // the only thing we are going to override is the bit that outputs the options in start_el
54
55        /**
56         * @see Walker::start_el()
57         * @since 2.1.0
58         *
59         * @param string $output Passed by reference. Used to append additional content.
60         * @param object $page Page data object.
61         * @param int $depth Depth of page in reference to parent pages. Used for padding.
62         * @param array $args Uses 'selected' argument for selected page to set selected HTML attribute for option element.
63         */
64        function start_el(&$output, $page, $depth, $args) {
65                $pad = str_repeat('&nbsp;', $depth * 3);
66
67                $output .= "\t<option class=\"level-$depth\" value=\"$page->ID\"";
68                if ( $page->ID == $args['selected'] )
69                        $output .= ' selected="selected"';
70                $output .= '>';
71                $title = wp_specialchars($page->post_title) . ' ZED1';
72                $output .= "$pad$title";
73                $output .= "</option>\n";
74        }
75}
76
77?>