Пример #1
0
 /**
  * The base method for creating a new Rewrite rule
  *
  * @param array|string $regex The regular expression to catch the URL
  * @param array  $args  The arguments in which the regular expression "alias" to
  *
  * @return Tribe__Events__Rewrite
  */
 public function add($regex, $args = array())
 {
     $regex = (array) $regex;
     $default = array();
     $args = array_filter(wp_parse_args($args, $default));
     $url = add_query_arg($args, 'index.php');
     // Optional Trailing Slash
     $regex[] = '?$';
     // Glue the pieces with slashes
     $regex = implode('/', array_filter($regex));
     // Add the Bases to the regex
     foreach ($this->bases as $key => $value) {
         $regex = str_replace(array('{{ ' . $key . ' }}', '{{' . $key . '}}'), $value, $regex);
     }
     // Apply the Preg Indexes to the URL
     preg_match_all('/%([0-9])/', $url, $matches);
     foreach (end($matches) as $index) {
         $url = str_replace('%' . $index, $this->rewrite->preg_index($index), $url);
     }
     // Add the rule
     $this->rules[$regex] = $url;
     return $this;
 }
/**
 * This is a callback function to enable custom post type archive pages.
 * This function will add new rewrite rules to the global $wp_rewrite variable.
 * Custom rewrite rules will support feeds and paging without any extra coding. (yeeey)
 * This function will be called by 'generate_rewrite_rules' filter.
 * Note that it is necessary to flush permalinks for this method to be called.
 * It might be useful to know that these rewrite rules will create new param called 'post_type_index'.
 * It can be used to check whether we are in custom post archive.
 * @param WP_Rewrite $wp_rewrite object that contains all the routing data
 * @return WP_Rewrite modified $wp_rewrite with my custom rewrite rules
 */
function pta_register_post_type_rewrite_rules($wp_rewrite)
{
    extract(pta_get_settings());
    if (empty($enabled_post_type_archives)) {
        return $wp_rewrite;
    }
    // if we don't have any enabled post type archives then might as well quit
    $custom_rules = array();
    $url_base = $url_base == '' ? $url_base : $url_base . '/';
    if ($use_rewrite_slug) {
        $customisations = $enabled_post_type_customisations;
        // just to make it shorter
        foreach ($enabled_post_type_archives as $post_type_slug) {
            $post_type = get_post_type_object($post_type_slug);
            if (!isset($post_type)) {
                continue;
            }
            // omg post type doesn't exist - continue with next one
            if (isset($customisations[$post_type_slug]) and !empty($customisations[$post_type_slug]['rewrite_slug'])) {
                $post_type = $enabled_post_type_customisations[$post_type_slug]['rewrite_slug'];
            } elseif (!empty($post_type->rewrite) and !empty($post_type->rewrite['slug'])) {
                $post_type = $post_type->rewrite['slug'];
            } else {
                $post_type = $post_type_slug;
            }
            $custom_rules["{$url_base}({$post_type})/([0-9]+)/([0-9]{1,2})/([0-9]{1,2})/?\$"] = "index.php?post_type_index=1&post_type={$post_type_slug}&year=" . $wp_rewrite->preg_index(2) . '&monthnum=' . $wp_rewrite->preg_index(3) . '&day=' . $wp_rewrite->preg_index(4);
            $custom_rules["{$url_base}({$post_type})/([0-9]+)/([0-9]{1,2})/?\$"] = "index.php?post_type_index=1&post_type={$post_type_slug}&year=" . $wp_rewrite->preg_index(2) . '&monthnum=' . $wp_rewrite->preg_index(3);
            $custom_rules["{$url_base}({$post_type})/([0-9]+/?\$)"] = "index.php?post_type_index=1&post_type={$post_type_slug}&year=" . $wp_rewrite->preg_index(2);
            $custom_rules["{$url_base}({$post_type})/page/?([0-9]{1,})/?\$"] = "index.php?post_type_index=1&post_type={$post_type_slug}&paged=" . $wp_rewrite->preg_index(2);
            $custom_rules["{$url_base}({$post_type})/(feed|rdf|rss|rss2|atom)/?\$"] = "index.php?post_type_index=1&post_type={$post_type_slug}&feed=" . $wp_rewrite->preg_index(2);
            $custom_rules["{$url_base}({$post_type})/?\$"] = "index.php?post_type_index=1&post_type={$post_type_slug}";
        }
    } else {
        $enabled_post_type_archives = implode('|', $enabled_post_type_archives);
        $custom_rules = array("{$url_base}({$enabled_post_type_archives})/([0-9]+)/([0-9]{1,2})/([0-9]{1,2})/?\$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&year=' . $wp_rewrite->preg_index(2) . '&monthnum=' . $wp_rewrite->preg_index(3) . '&day=' . $wp_rewrite->preg_index(4), "{$url_base}({$enabled_post_type_archives})/([0-9]+)/([0-9]{1,2})/?\$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&year=' . $wp_rewrite->preg_index(2) . '&monthnum=' . $wp_rewrite->preg_index(3), "{$url_base}({$enabled_post_type_archives})/([0-9]+)/?\$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&year=' . $wp_rewrite->preg_index(2), "{$url_base}({$enabled_post_type_archives})/page/?([0-9]{1,})/?\$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&paged=' . $wp_rewrite->preg_index(2), "{$url_base}({$enabled_post_type_archives})/(feed|rdf|rss|rss2|atom)/?\$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&feed=' . $wp_rewrite->preg_index(2), "{$url_base}({$enabled_post_type_archives})/?\$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1));
    }
    $wp_rewrite->rules = array_merge($custom_rules, $wp_rewrite->rules);
    // merge existing rules with custom ones
    return $wp_rewrite;
}
Пример #3
0
 /**
  * Register bbPress-specific rewrite rules for uri's that are not
  * setup for us by way of custom post types or taxonomies. This includes:
  * - Front-end editing
  * - Topic views
  * - User profiles
  *
  * @since bbPress (r2688)
  * @param WP_Rewrite $wp_rewrite bbPress-sepecific rules are appended in
  *                                $wp_rewrite->rules
  */
 public static function generate_rewrite_rules($wp_rewrite)
 {
     // Slugs
     $view_slug = bbp_get_view_slug();
     $user_slug = bbp_get_user_slug();
     // Unique rewrite ID's
     $edit_id = bbp_get_edit_rewrite_id();
     $view_id = bbp_get_view_rewrite_id();
     $user_id = bbp_get_user_rewrite_id();
     $favs_id = bbp_get_user_favorites_rewrite_id();
     $subs_id = bbp_get_user_subscriptions_rewrite_id();
     $tops_id = bbp_get_user_topics_rewrite_id();
     $reps_id = bbp_get_user_replies_rewrite_id();
     // Rewrite rule matches used repeatedly below
     $root_rule = '/([^/]+)/?$';
     $edit_rule = '/([^/]+)/edit/?$';
     $feed_rule = '/([^/]+)/feed/?$';
     $page_rule = '/([^/]+)/page/?([0-9]{1,})/?$';
     // User profile rules
     $tops_rule = '/([^/]+)/topics/?$';
     $reps_rule = '/([^/]+)/replies/?$';
     $favs_rule = '/([^/]+)/' . bbp_get_user_favorites_slug() . '/?$';
     $subs_rule = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/?$';
     $tops_page_rule = '/([^/]+)/topics/page/?([0-9]{1,})/?$';
     $reps_page_rule = '/([^/]+)/replies/page/?([0-9]{1,})/?$';
     $favs_page_rule = '/([^/]+)/' . bbp_get_user_favorites_slug() . '/page/?([0-9]{1,})/?$';
     $subs_page_rule = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/page/?([0-9]{1,})/?$';
     // New bbPress specific rules to merge with existing that are not
     // handled automatically by custom post types or taxonomy types
     $bbp_rules = array(bbp_get_forum_slug() . $edit_rule => 'index.php?' . bbp_get_forum_post_type() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', bbp_get_topic_slug() . $edit_rule => 'index.php?' . bbp_get_topic_post_type() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', bbp_get_reply_slug() . $edit_rule => 'index.php?' . bbp_get_reply_post_type() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', bbp_get_topic_tag_tax_slug() . $edit_rule => 'index.php?' . bbp_get_topic_tag_tax_id() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', $user_slug . $tops_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $tops_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $reps_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $reps_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $favs_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $favs_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $subs_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $subs_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $tops_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $tops_id . '=1', $user_slug . $reps_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $reps_id . '=1', $user_slug . $favs_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $favs_id . '=1', $user_slug . $subs_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $subs_id . '=1', $user_slug . $edit_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', $user_slug . $root_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1), $view_slug . $page_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index(1) . '&paged=' . $wp_rewrite->preg_index(2), $view_slug . $feed_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index(1) . '&feed=' . $wp_rewrite->preg_index(2), $view_slug . $root_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index(1));
     // Merge bbPress rules with existing
     $wp_rewrite->rules = array_merge($bbp_rules, $wp_rewrite->rules);
     // Return merged rules
     return $wp_rewrite;
 }
Пример #4
0
 /**
  * Add rewrite rules for .well-known.
  *
  * @param WP_Rewrite $wp_rewrite
  */
 public static function rewrite_rules($wp_rewrite)
 {
     $well_known_rules = array('.well-known/(.+)' => 'index.php?well-known=' . $wp_rewrite->preg_index(1));
     $wp_rewrite->rules = $well_known_rules + $wp_rewrite->rules;
 }
 public function get_taxonomy_rules()
 {
     $rules = array($this->cat_base . '([^/]+)/(\\d{4}-\\d{2}-\\d{2})/?$' => 'index.php?tribe_events_cat=' . $this->rewrite->preg_index(2) . '&post_type=' . TribeEvents::POSTTYPE . '&eventDisplay=day' . '&eventDate=' . $this->rewrite->preg_index(3), $this->tag_base . '([^/]+)/(\\d{4}-\\d{2}-\\d{2})/?$' => 'index.php?tag=' . $this->rewrite->preg_index(2) . '&post_type=' . TribeEvents::POSTTYPE . '&eventDisplay=day' . '&eventDate=' . $this->rewrite->preg_index(3));
     return $rules;
 }
 /**
  * Generates all the rewrite rules for a given post type.
  *
  * The rewrite rules allow a post type to be filtered by all possible combinations & permutations
  * of taxonomies that apply to the specified post type and additional query_vars specified with
  * the $queryVars parameter.
  *
  * Must be called from a function hooked to the 'generate_rewrite_rules' action so that the global
  * $wpRewrite->preg_index function returns the correct value.
  *
  * You have to use pre_get_posts, query_vars filters to add the category/tag rewrites correctly.
  * See for example ~/kpt-intranet-blog/src/KptIntranetBlog/Theme/Component/UserImageComponent.php
  *
  * @param \WP_Rewrite $wpRewrite
  * @param string|object $postType The post type for which you wish to create the rewrite rules
  * @param array $queryVars optional Non-taxonomy query vars you wish to create rewrite rules for. Rules will be created to capture any single string for the query_var, that is, a rule of the form '/query_var/(.+)/'
  *
  * @author Brent Shepherd <*****@*****.**>
  * @since 1.0
  * @url http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/
  */
 function generateRewriteRulesForPostType($wpRewrite, $postType, $queryVars = array())
 {
     if (!is_object($postType)) {
         $postType = get_post_type_object($postType);
     }
     $newRewriteRules = array();
     $taxonomies = get_object_taxonomies($postType->name, 'objects');
     // Add taxonomy filters to the query vars array
     foreach ($taxonomies as $taxonomy) {
         if ($taxonomy->query_var == 'category_name' || $taxonomy->query_var == 'post_tag') {
             $queryVars[] = $taxonomy->rewrite['slug'];
         } else {
             $queryVars[] = $taxonomy->query_var;
         }
     }
     // Loop over all the possible combinations of the query vars
     for ($i = 1; $i <= count($queryVars); $i++) {
         $newRewriteRule = $postType->rewrite['slug'] . '/';
         $newQueryString = 'index.php?post_type=' . $postType->name;
         // Prepend the rewrites & queries
         for ($n = 1; $n <= $i; $n++) {
             $newRewriteRule .= '(' . implode('|', $queryVars) . ')/(.+?)/';
             $newQueryString .= '&' . $wpRewrite->preg_index($n * 2 - 1) . '=' . $wpRewrite->preg_index($n * 2);
         }
         // Allow paging of filtered post type - WordPress expects 'page' in the URL but uses 'paged' in the query string so paging doesn't fit into our regex
         $newPagedRewriteRule = $newRewriteRule . 'page/([0-9]{1,})/';
         $newPagedQueryString = $newQueryString . '&paged=' . $wpRewrite->preg_index($i * 2 + 1);
         // Make the trailing backslash optional
         $newPagedRewriteRule = $newPagedRewriteRule . '?$';
         $newRewriteRule = $newRewriteRule . '?$';
         // Add the new rewrites
         $newRewriteRules = array($newPagedRewriteRule => $newPagedQueryString, $newRewriteRule => $newQueryString) + $newRewriteRules;
     }
     $wpRewrite->rules = $newRewriteRules + $wpRewrite->rules;
 }