Allow for a custom Endpoint Mask to be passed to add_endpoint(). Allows for endpoints to be targeted to specific rewrite rules. Allow custom post_types to specify their Endpoint mask. Allows for post_type's rewrite rules to inherit Post endpoints, or alternatively, allows for add_endpoint() to target specific post_types. Fixes #12605

git-svn-id: http://svn.automattic.com/wordpress/trunk@13773 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
dd32 2010-03-20 02:05:32 +00:00
parent a7126004c7
commit 3fdd2bbdff
2 changed files with 16 additions and 10 deletions

View File

@ -790,7 +790,7 @@ function register_post_type($post_type, $args = array()) {
$wp_post_types = array(); $wp_post_types = array();
// Args prefixed with an underscore are reserved for internal use. // Args prefixed with an underscore are reserved for internal use.
$defaults = array('label' => false, 'singular_label' => false, 'description' => '', 'publicly_queryable' => null, 'exclude_from_search' => null, '_builtin' => false, '_edit_link' => 'post.php?post=%d', 'capability_type' => 'post', 'hierarchical' => false, 'public' => false, 'rewrite' => true, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'show_ui' => null ); $defaults = array('label' => false, 'singular_label' => false, 'description' => '', 'publicly_queryable' => null, 'exclude_from_search' => null, '_builtin' => false, '_edit_link' => 'post.php?post=%d', 'capability_type' => 'post', 'hierarchical' => false, 'public' => false, 'rewrite' => true, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'show_ui' => null, 'permalink_epmask' => EP_NONE );
$args = wp_parse_args($args, $defaults); $args = wp_parse_args($args, $defaults);
$args = (object) $args; $args = (object) $args;
@ -855,7 +855,7 @@ function register_post_type($post_type, $args = array()) {
if ( !isset($args->rewrite['with_front']) ) if ( !isset($args->rewrite['with_front']) )
$args->rewrite['with_front'] = true; $args->rewrite['with_front'] = true;
$wp_rewrite->add_rewrite_tag("%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name="); $wp_rewrite->add_rewrite_tag("%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=");
$wp_rewrite->add_permastruct($post_type, "{$args->rewrite['slug']}/%$post_type%", $args->rewrite['with_front']); $wp_rewrite->add_permastruct($post_type, "{$args->rewrite['slug']}/%$post_type%", $args->rewrite['with_front'], $args->permalink_epmask);
} }
if ( $args->register_meta_box_cb ) if ( $args->register_meta_box_cb )
@ -4580,4 +4580,4 @@ function _show_post_preview() {
add_filter('the_preview', '_set_preview'); add_filter('the_preview', '_set_preview');
} }
} }

View File

@ -54,9 +54,9 @@ function add_rewrite_tag($tagname, $regex) {
* @param string $struct Permalink structure. * @param string $struct Permalink structure.
* @param bool $with_front Prepend front base to permalink structure. * @param bool $with_front Prepend front base to permalink structure.
*/ */
function add_permastruct( $name, $struct, $with_front = true ) { function add_permastruct( $name, $struct, $with_front = true, $ep_mask = EP_NONE ) {
global $wp_rewrite; global $wp_rewrite;
return $wp_rewrite->add_permastruct( $name, $struct, $with_front ); return $wp_rewrite->add_permastruct( $name, $struct, $with_front, $ep_mask );
} }
/** /**
@ -1083,7 +1083,7 @@ class WP_Rewrite {
return false; return false;
if ( isset($this->extra_permastructs[$name]) ) if ( isset($this->extra_permastructs[$name]) )
return $this->extra_permastructs[$name]; return $this->extra_permastructs[$name][0];
return false; return false;
} }
@ -1359,6 +1359,8 @@ class WP_Rewrite {
case '%day%': case '%day%':
$ep_mask_specific = EP_DAY; $ep_mask_specific = EP_DAY;
break; break;
default:
$ep_mask_specific = EP_NONE;
} }
//create query for /page/xx //create query for /page/xx
@ -1611,8 +1613,12 @@ class WP_Rewrite {
$page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite); $page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite);
// Extra permastructs // Extra permastructs
foreach ( $this->extra_permastructs as $permastruct ) foreach ( $this->extra_permastructs as $permastruct ) {
$this->extra_rules_top = array_merge($this->extra_rules_top, $this->generate_rewrite_rules($permastruct, EP_NONE)); if ( is_array($permastruct) )
$this->extra_rules_top = array_merge($this->extra_rules_top, $this->generate_rewrite_rules($permastruct[0], $permastruct[1]));
else
$this->extra_rules_top = array_merge($this->extra_rules_top, $this->generate_rewrite_rules($permastruct, EP_NONE));
}
// Put them together. // Put them together.
if ( $this->use_verbose_page_rules ) if ( $this->use_verbose_page_rules )
@ -1906,10 +1912,10 @@ class WP_Rewrite {
* @param string $struct Permalink structure. * @param string $struct Permalink structure.
* @param bool $with_front Prepend front base to permalink structure. * @param bool $with_front Prepend front base to permalink structure.
*/ */
function add_permastruct($name, $struct, $with_front = true) { function add_permastruct($name, $struct, $with_front = true, $ep_mask = EP_NONE) {
if ( $with_front ) if ( $with_front )
$struct = $this->front . $struct; $struct = $this->front . $struct;
$this->extra_permastructs[$name] = $struct; $this->extra_permastructs[$name] = array($struct, $ep_mask);
} }
/** /**