WordPress.org

Make WordPress Core

Ticket #16687: non-verbose-page-rules.php

File non-verbose-page-rules.php, 1.5 KB (added by markjaquith, 9 years ago)

Partial solution

Line 
1<?php
2
3class CWS_Non_Verbose_Page_Rules {
4        public function __construct() {
5                add_action( 'init', array( $this, 'init' ) );
6        }
7
8        public function init() {
9                add_filter( 'post_rewrite_rules', array( $this, 'post_rewrite_rules' ) );
10                add_filter( 'query_vars', array( $this, 'query_vars' ) );
11                add_filter( 'request', array( $this, 'request' ) );
12        }
13
14        public function page_rewrite_rules( $rules ) {
15                foreach ( $rules as $k => $v ) {
16                        $rules[$k] = str_replace( 'pagename=', 'post_or_page=', $v );
17                }
18                return $rules;
19        }
20
21        public function post_rewrite_rules( $rules ) {
22                global $wp_rewrite;
23                if ( $wp_rewrite->use_verbose_page_rules ) {
24                        $wp_rewrite->use_verbose_page_rules = false;
25                        add_filter( 'page_rewrite_rules', array( $this, 'page_rewrite_rules' ) );
26                        foreach ( $rules as $k => $v ) {
27                                $rules[$k] = str_replace( 'name=', 'post_or_page=', $v );
28                        }
29                }
30                return $rules;
31        }
32
33        public function query_vars( $vars ) {
34                $vars[] = 'post_or_page';
35                return $vars;
36        }
37
38        public function request( $request ) {
39                if ( !isset( $request['post_or_page'] ) )
40                        return $request;
41                global $wpdb;
42                $post_or_page = $wpdb->get_var( $wpdb->prepare( "SELECT post_type FROM $wpdb->posts WHERE post_name = %s AND post_type IN( 'post', 'page') LIMIT 1;", $request['post_or_page'] ) );
43                if ( 'page' == $post_or_page )
44                        $request['pagename'] = $request['post_or_page'];
45                else
46                        $request['name'] = $request['post_or_page'];
47                unset( $request['post_or_page'] );
48                return $request;
49        }
50
51}
52
53new CWS_Non_Verbose_Page_Rules;