Intereting Posts

Автогенерировать правила перезаписи для нескольких таксономий

поэтому я вернулся с переписыванием … Я ищу более автоматизированное решение.

я наткнулся на это на interwebs:

/** * 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 $query_vars parameter. * * Must be called from a function hooked to the 'generate_rewrite_rules' action so that the global * $wp_rewrite->preg_index function returns the correct value. * * @param string|object $post_type The post type for which you wish to create the rewrite rules * @param array $query_vars 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 <me@brentshepherd.com> * @since 1.0 */ function eg_generate_rewrite_rules( $post_type, $query_vars = array() ) { global $wp_rewrite; if( ! is_object( $post_type ) ) $post_type = get_post_type_object( $post_type ); $new_rewrite_rules = array(); $taxonomies = get_object_taxonomies( $post_type->name, 'objects' ); // Add taxonomy filters to the query vars array foreach( $taxonomies as $taxonomy ){ //$query_vars[$taxonomy->rewrite['slug']] = $taxonomy->query_var; $query_vars[] = $taxonomy->rewrite['slug'] ; add_rewrite_tag('%'.$taxonomy->rewrite['slug'].'%','([^&]+)'); } // Loop over all the possible combinations of the query vars for( $i = 1; $i <= count( $query_vars ); $i++ ) { $new_rewrite_rule = $post_type->rewrite['slug'] . '/'; $new_query_string = 'index.php?post_type=' . $post_type->name; // Prepend the rewrites & queries for( $n = 1; $n <= $i; $n++ ) { $new_rewrite_rule .= '(' . implode( '|', $query_vars ) . ')/(.+?)/'; $new_query_string .= '&' . $wp_rewrite->preg_index( $n * 2 - 1 ) . '=' . $wp_rewrite->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 $new_paged_rewrite_rule = $new_rewrite_rule . 'page/([0-9]{1,})/'; $new_paged_query_string = $new_query_string . '&paged=' . $wp_rewrite->preg_index( $i * 2 + 1 ); // Make the trailing backslash optional $new_paged_rewrite_rule = $new_paged_rewrite_rule . '?$'; $new_rewrite_rule = $new_rewrite_rule . '?$'; // Add the new rewrites $new_rewrite_rules = array( $new_paged_rewrite_rule => $new_paged_query_string, $new_rewrite_rule => $new_query_string ) + $new_rewrite_rules; } return $new_rewrite_rules; } // add the rules function mv_add_rewrite_rule($wp_rewrite){ $new_rules = eg_generate_rewrite_rules('product'); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules','mv_add_rewrite_rule',99); 

Advanced Taxonomy Queries with Pretty URLs

но в то время как это отлично работает, если у вас нет перезаписываемых слизней, установленных для каждой пользовательской таксономии, это терпит неудачу, если ваша переписывающая пробка отличается от вашего запроса var. (поскольку он автоматически добавляет query_var, захваченный в $ match, как строку запроса.

как я могу изменить эту функцию так, чтобы она соответствовала переписыванию ['slug'], но добавила связанный query_var в строку запроса.

Надеюсь, это имело смысл. ИЛИ, это вообще возможно? было бы целесообразно жестко закодировать правила переписывания?

продакт-категория / ткань / цвет / красный

продакт-теги / новый / стиль / жаккард

(товар-категория или товар-тег) / (цвет или стиль или стиль отделки материала)

Solutions Collecting From Web of "Автогенерировать правила перезаписи для нескольких таксономий"