Don't save page and attachemtn uris to page_uris and page_attachment_uris. This is not needed. Add an option to use wildcard page rewrite rules instead of per-page rules. see #3614

git-svn-id: http://svn.automattic.com/wordpress/trunk@6351 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2007-12-04 00:19:10 +00:00
parent 07e337adcf
commit 7c033fd82c
2 changed files with 50 additions and 42 deletions

View File

@ -1168,44 +1168,6 @@ function &get_pages($args = '') {
return $pages; return $pages;
} }
function generate_page_uri_index() {
global $wpdb;
//get pages in order of hierarchy, i.e. children after parents
$posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page'"));
//now reverse it, because we need parents after children for rewrite rules to work properly
$posts = array_reverse($posts, true);
$page_uris = array();
$page_attachment_uris = array();
if ($posts) {
foreach ($posts as $id => $post) {
// URL => page name
$uri = get_page_uri($id);
$attachments = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = %d", $id ));
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
$attach_uri = get_page_uri($attachment->ID);
$page_attachment_uris[$attach_uri] = $attachment->ID;
}
}
$page_uris[$uri] = $id;
}
delete_option('page_uris');
update_option('page_uris', $page_uris);
if ( $page_attachment_uris ) {
delete_option('page_attachment_uris');
update_option('page_attachment_uris', $page_attachment_uris);
}
}
}
// //
// Attachment functions // Attachment functions
// //

View File

@ -185,6 +185,7 @@ class WP_Rewrite {
var $non_wp_rules = array(); //rules that don't redirect to WP's index.php var $non_wp_rules = array(); //rules that don't redirect to WP's index.php
var $endpoints; var $endpoints;
var $use_verbose_rules = false; var $use_verbose_rules = false;
var $use_verbose_page_rules = true;
var $rewritecode = var $rewritecode =
array( array(
'%year%', '%year%',
@ -277,12 +278,55 @@ class WP_Rewrite {
return "$match_prefix$number$match_suffix"; return "$match_prefix$number$match_suffix";
} }
function page_uri_index() {
global $wpdb;
//get pages in order of hierarchy, i.e. children after parents
$posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page'"));
//now reverse it, because we need parents after children for rewrite rules to work properly
$posts = array_reverse($posts, true);
$page_uris = array();
$page_attachment_uris = array();
if ( !$posts )
return array( array(), array() );
foreach ($posts as $id => $post) {
// URL => page name
$uri = get_page_uri($id);
$attachments = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = %d", $id ));
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
$attach_uri = get_page_uri($attachment->ID);
$page_attachment_uris[$attach_uri] = $attachment->ID;
}
}
$page_uris[$uri] = $id;
}
return array( $page_uris, $page_attachment_uris );
}
function page_rewrite_rules() { function page_rewrite_rules() {
$uris = get_option('page_uris'); global $wpdb;
$attachment_uris = get_option('page_attachment_uris');
$rewrite_rules = array(); $rewrite_rules = array();
$page_structure = $this->get_page_permastruct(); $page_structure = $this->get_page_permastruct();
if ( ! $this->use_verbose_page_rules ) {
$this->add_rewrite_tag('%pagename%', "(.+)", 'pagename=');
$rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure, EP_PAGES));
return $rewrite_rules;
}
$page_uris = $this->page_uri_index();
$uris = $page_uris[0];
$attachment_uris = $page_uris[1];
if( is_array( $attachment_uris ) ) { if( is_array( $attachment_uris ) ) {
foreach ($attachment_uris as $uri => $pagename) { foreach ($attachment_uris as $uri => $pagename) {
$this->add_rewrite_tag('%pagename%', "($uri)", 'attachment='); $this->add_rewrite_tag('%pagename%', "($uri)", 'attachment=');
@ -785,7 +829,10 @@ class WP_Rewrite {
$page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite); $page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite);
// Put them together. // Put them together.
if ( $this->use_verbose_page_rules )
$this->rules = array_merge($this->extra_rules_top, $robots_rewrite, $default_feeds, $page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $tag_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $this->extra_rules); $this->rules = array_merge($this->extra_rules_top, $robots_rewrite, $default_feeds, $page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $tag_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $this->extra_rules);
else
$this->rules = array_merge($this->extra_rules_top, $robots_rewrite, $default_feeds, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $tag_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $page_rewrite, $this->extra_rules);
do_action_ref_array('generate_rewrite_rules', array(&$this)); do_action_ref_array('generate_rewrite_rules', array(&$this));
$this->rules = apply_filters('rewrite_rules_array', $this->rules); $this->rules = apply_filters('rewrite_rules_array', $this->rules);
@ -900,7 +947,6 @@ class WP_Rewrite {
} }
function flush_rules() { function flush_rules() {
generate_page_uri_index();
delete_option('rewrite_rules'); delete_option('rewrite_rules');
$this->wp_rewrite_rules(); $this->wp_rewrite_rules();
if ( function_exists('save_mod_rewrite_rules') ) if ( function_exists('save_mod_rewrite_rules') )