-
-
Save alinademi/a08c069f6fb7129190427267d367576d to your computer and use it in GitHub Desktop.
Taxonomy Rewrite Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function rewriting_resources($wp_rewrite) { | |
$rules = array(); | |
$terms = get_terms( array( | |
'taxonomy' => 'resource_type', | |
'hide_empty' => false, | |
) ); | |
$post_type = 'resources'; | |
foreach ($terms as $term) { | |
// Is it a child term? | |
if( $term->parent ) { | |
$ancestors = get_ancestors( $term->term_id, $taxonomy, 'taxonomy' ); | |
foreach ( (array)$ancestors as $ancestor ) { | |
$ancestor_term = get_term($ancestor, $taxonomy); | |
$hierarchical_slugs[] = $ancestor_term->slug; | |
} | |
$hierarchical_slugs = array_reverse($hierarchical_slugs); | |
$hierarchical_slugs[] = $term->slug; | |
$rules['resources/' . implode('/', $hierarchical_slugs ) . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&' . $post_type . '=$matches[1]&name=$matches[1]'; | |
} else { | |
$rules['resources/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&' . $post_type . '=$matches[1]&name=$matches[1]'; | |
} | |
} | |
// merge with global rules | |
$wp_rewrite->rules = $rules + $wp_rewrite->rules; | |
} | |
add_filter('generate_rewrite_rules', 'resources_cpt_generating_rule'); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
add_action(‘init’, ‘cpt_resources’); | |
function cpt_resources() { | |
$labels = array( | |
‘name’ => _x(‘Resources’, ‘snt’), | |
‘singular_name’ => _x(‘Resource’, ‘snt’), | |
‘add_new’ => _x(‘Add Resource’, ‘snt’), | |
‘add_new_item’ => __(‘Add Resource’), | |
‘edit_item’ => __(‘Edit Resource’), | |
‘new_item’ => __(‘New Resource’), | |
‘view_item’ => __(‘View Resource’), | |
‘search_items’ => __(‘Search Resources’), | |
‘not_found’ => __(‘Nothing found’), | |
‘not_found_in_trash’ => __(‘Nothing found in Trash’), | |
‘parent_item_colon’ => ” | |
); | |
$args = array( | |
‘labels’ => $labels, | |
‘taxonomies’ => array(‘resource_type’), | |
‘public’ => true, | |
‘publicly_queryable’ => true, | |
‘show_ui’ => true, | |
‘query_var’ => true, | |
‘rewrite’ => true, | |
‘capability_type’ => ‘post’, | |
‘hierarchical’ => false, | |
‘menu_position’ => null, | |
‘supports’ => array(‘title’,’thumbnail’, ‘editor’ ), | |
); | |
register_post_type( ‘resources_post_type’ , $args ); | |
} | |
function resource_type() { | |
$labels = array( | |
‘name’ => _x( ‘Resource Types’, ‘Taxonomy General Name’, ‘snt’ ), | |
‘singular_name’ => _x( ‘Resource Type’, ‘Taxonomy Singular Name’, ‘snt’ ), | |
‘menu_name’ => __( ‘Resource Types’, ‘snt’ ), | |
‘all_items’ => __( ‘All Items’, ‘snt’ ), | |
‘parent_item’ => __( ‘Parent Item’, ‘snt’ ), | |
‘parent_item_colon’ => __( ‘Parent Item:’, ‘snt’ ), | |
‘new_item_name’ => __( ‘New Item Name’, ‘snt’ ), | |
‘add_new_item’ => __( ‘Add New Item’, ‘snt’ ), | |
‘edit_item’ => __( ‘Edit Item’, ‘snt’ ), | |
‘update_item’ => __( ‘Update Item’, ‘snt’ ), | |
‘view_item’ => __( ‘View Item’, ‘snt’ ), | |
‘separate_items_with_commas’ => __( ‘Separate items with commas’, ‘snt’ ), | |
‘add_or_remove_items’ => __( ‘Add or remove items’, ‘snt’ ), | |
‘choose_from_most_used’ => __( ‘Choose from the most used’, ‘snt’ ), | |
‘popular_items’ => __( ‘Popular Items’, ‘snt’ ), | |
‘search_items’ => __( ‘Search Items’, ‘snt’ ), | |
‘not_found’ => __( ‘Not Found’, ‘snt’ ), | |
‘no_terms’ => __( ‘No items’, ‘snt’ ), | |
‘items_list’ => __( ‘Items list’, ‘snt’ ), | |
‘items_list_navigation’ => __( ‘Items list navigation’, ‘snt’ ), | |
); | |
$args = array( | |
‘labels’ => $labels, | |
‘hierarchical’ => true, | |
‘public’ => true, | |
‘show_ui’ => true, | |
‘show_admin_column’ => true, | |
‘show_in_nav_menus’ => true, | |
‘show_tagcloud’ => true, | |
‘rewrite’ => array(‘slug’ => ‘resources’) | |
); | |
register_taxonomy( ‘resource_type’, array( ‘resources_post_type’ ), $args ); | |
} | |
add_action( ‘init’, ‘resource_type’, 0 ); | |
function rewriting_resources($wp_rewrite) { | |
$rules = array(); | |
$terms = get_terms( array( | |
‘taxonomy’ => ‘resource_type’, | |
‘hide_empty’ => false, | |
) ); | |
$post_type = ‘resources_post_type’; | |
foreach ( $terms as $term ) { | |
// Is it a child term? | |
if ( $term->parent ) { | |
$ancestors = get_ancestors( $term->term_id, $taxonomy, ‘taxonomy’ ); | |
foreach ( (array)$ancestors as $ancestor ) { | |
$ancestor_term = get_term($ancestor, $taxonomy); | |
$hierarchical_slugs[] = $ancestor_term->slug; | |
} | |
$hierarchical_slugs = array_reverse($hierarchical_slugs); | |
$hierarchical_slugs[] = $term->slug; | |
$rules[‘resources/’ . implode(‘/’, $hierarchical_slugs ) . ‘/([^/]*)$’] = ‘index.php?post_type=’ . $post_type. ‘&’ . $post_type . ‘=$matches[1]&name=$matches[1]’; | |
} else { | |
$rules[‘resources/’ . $term->slug . ‘/([^/]*)$’] = ‘index.php?post_type=’ . $post_type. ‘&’ . $post_type . ‘=$matches[1]&name=$matches[1]’; | |
} | |
} | |
// merge with global rules | |
$wp_rewrite->rules = $rules + $wp_rewrite->rules; | |
} | |
add_filter(‘generate_rewrite_rules’, ‘rewriting_resources’); | |
function change_link( $permalink, $post ) { | |
if ( $post->post_type == ‘resources_post_type’ ) { | |
$resource_terms = get_the_terms( $post, ‘resource_type’ ); | |
$term_slug = ”; | |
if( ! empty( $resource_terms ) ) { | |
foreach ( $resource_terms as $term ) { | |
// The featured resource will have another category which is the main one | |
if( $term->slug == ‘featured’ ) { | |
continue; | |
} | |
$term_slug = $term->slug; | |
break; | |
} | |
} | |
$permalink = get_home_url() .”/resources/” . $term_slug . ‘/’ . $post->post_name; | |
} | |
return $permalink; | |
} | |
add_filter(‘post_type_link’,”change_link”,10,2); | |
this code in taxonomy-resource_type.php: | |
queried_object; | |
$taxonomy->children = get_terms( ‘resource_type’, array( ‘hide_empty’ => 0, ‘parent’ => $taxonomy->term_id, ‘orderby’ => ‘id’, ‘order’ => ‘ASC’, ) ); | |
$parent = $taxonomy->parent; | |
$not_the_last_subcategory = is_array( $taxonomy->children ) && count( $taxonomy->children ) && $taxonomy->parent == 0; | |
?> | |
children); | |
?> | |
<div class="pr_subcategorias “> | |
children as $key=>$subcategory ) { | |
?> | |
<a href="”>name ?> | |
<a href="”> | |
description, false ); | |
echo $description; | |
?> | |
<a href="”> | |
children = get_terms( ‘resource_type’, array(‘hide_empty’ => 0, ‘parent’ => $parent, ‘orderby’ => ‘id’, ‘order’ => ‘ASC’, )); | |
$columnas = count($taxonomy->children); | |
$current_category = get_query_var(‘resource_type’); | |
?> | |
<div class="pr_subcategorias_menu “> | |
name; ?> | |
children as $key=>$subcategory ) { | |
?> | |
<li class="th_subcategoria slug == $current_category ) echo ‘activo’; ?>”><a href="”>name ?> | |
$current_category, | |
‘post_type’ => ‘resources_post_type’, | |
‘posts_per_page’ => -1, | |
‘orderby’ => ‘menu_order’, | |
‘order’ => ‘ASC’, | |
‘no_found_rows’ => true // Si no hay paginacion, hace mas rapido la QUERY | |
) | |
); | |
if ( $loop->have_posts() ) { | |
while ( $loop->have_posts() ) { | |
$loop->the_post(); | |
$pr_id = get_the_id(); | |
$pr_image = wp_get_attachment_url( get_post_thumbnail_id( $pr_id ) ); | |
?> | |
<img src="” alt=”” /> | |
<a href="”> | |
And this in single-resources_post_type.php: | |
slug; | |
$current_father = $term[0]->parent; | |
$taxonomy->children = get_terms( ‘resource_type’, array( ‘hide_empty’ => 0, ‘parent’ => $current_father, ‘orderby’ => ‘id’, ‘order’ => ‘ASC’, )); | |
$columnas = count($taxonomy->children); | |
?> | |
<div class="pr_subcategorias_menu “> | |
children as $key=>$subcategory ) { | |
?> | |
<li class="th_subcategoria slug == $current_category ) echo ‘activo’; ?>”><a href="”>name ?> | |
CLIENTE: | |
SERVICIOS: | |
AÑO: | |
PAIS: | |
<div class="dcha “> | |
INFO | |
PROYECTOS RELACIONADOS | |
PREMIOS | |
VIDEOS | |
<?php | |
if ( get_the_content() ) echo '’ . get_the_content() . ”; | |
if ( $relaciones ) echo ” . $relaciones . ”; | |
if ( $premios ) echo ” . $premios . ”; | |
if ( $videos ) echo ” . $videos . ”; | |
?> | |
name . ‘ – ‘ . $current_category; ?> | |
$current_category, | |
‘post_type’ => ‘resources_post_type’, | |
‘post__not_in’ => array( $post_id ), | |
‘posts_per_page’ => -1, | |
‘orderby’ => ‘menu_order’, | |
‘order’ => ‘ASC’, | |
‘no_found_rows’ => true // Si no hay paginacion, hace mas rapido la QUERY | |
) | |
); | |
if ( $loop->have_posts() ) { | |
while ( $loop->have_posts() ) { | |
$loop->the_post(); | |
$pr_id = get_the_id(); | |
$pr_image = wp_get_attachment_url( get_post_thumbnail_id( $pr_id ) ); | |
?> | |
<img src="” alt=”” /> | |
<a href="”> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Rewrites rules | |
add_action( 'generate_rewrite_rules', 'register_proyecto_rewrite_rules' ); | |
function register_proyecto_rewrite_rules( $wp_rewrite ) { | |
$new_rules = array( | |
'proyecto/([^/]+)/?$' => 'index.php?proyecto-category=' . $wp_rewrite->preg_index( 1 ), | |
'proyecto/([^/]+)/([^/]+)/?$' => 'index.php?post_type=proyecto&proyecto-category=' . $wp_rewrite->preg_index( 1 ) . '&proyecto=' . $wp_rewrite->preg_index( 2 ), | |
'proyecto/([^/]+)/([^/]+)/page/(\d{1,})/?$' => 'index.php?post_type=proyecto&proyecto-category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 3 ), | |
'proyecto/([^/]+)/([^/]+)/([^/]+)/?$' => 'index.php?post_type=proyecto&proyecto-category=' . $wp_rewrite->preg_index( 2 ) . '&proyecto=' . $wp_rewrite->preg_index( 3 ), | |
); | |
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules; | |
} | |
// A hacky way of adding support for flexible custom permalinks | |
// There is one case in which the rewrite rules from register_kb_rewrite_rules() fail: | |
// When you visit the archive page for a child section(for example: http://example.com/proyecto/category/child-category) | |
// The deal is that in this situation, the URL is parsed as a Knowledgebase post with slug “child-category” from the “category” section | |
function fix_proyecto_subcategory_query($query) { | |
if ( isset( $query['post_type'] ) && 'proyecto' == $query['post_type'] ) { | |
if ( isset( $query['proyecto'] ) && $query['proyecto'] && isset( $query['proyecto-category'] ) && $query['proyecto-category'] ) { | |
$query_old = $query; | |
// Check if this is a paginated result(like search results) | |
if ( 'page' == $query['proyecto-category'] ) { | |
$query['paged'] = $query['name']; | |
unset( $query['proyecto-category'], $query['name'], $query['proyecto'] ); | |
} | |
// Make it easier on the DB | |
$query['fields'] = 'ids'; | |
$query['posts_per_page'] = 1; | |
// See if we have results or not | |
$_query = new WP_Query( $query ); | |
if ( ! $_query->posts ) { | |
$query = array( 'proyecto-category' => $query['proyecto'] ); | |
if ( isset( $query_old['proyecto-category'] ) && 'page' == $query_old['proyecto-category'] ) { | |
$query['paged'] = $query_old['name']; | |
} | |
} | |
} | |
} | |
return $query; | |
} | |
add_filter( 'request', 'fix_proyecto_subcategory_query', 10 ); | |
function proyecto_article_permalink( $article_id, $section_id = false, $leavename = false, $only_permalink = false ) { | |
$taxonomy = 'proyecto-category'; | |
$article = get_post( $article_id ); | |
$return = 'post_type%' : $article->post_name ) ); | |
$return .= $permalink . '/” >' . get_the_title( $article->ID ) . ''; | |
return ( $only_permalink ) ? $permalink : $return; | |
} | |
function filter_proyecto_post_link( $permalink, $post, $leavename ) { | |
if ( get_post_type( $post->ID ) == 'proyecto' ) { | |
$terms = wp_get_post_terms( $post->ID, 'proyecto-category' ); | |
$term = ( $terms ) ? $terms[0]->term_id : false; | |
$permalink = proyecto_article_permalink( $post->ID, $term, $leavename, true ); | |
} | |
return $permalink; | |
} | |
add_filter( 'post_type_link', 'filter_proyecto_post_link', 100, 3 ); | |
function filter_proyecto_section_terms_link( $termlink, $term, $taxonomy = false ) { | |
if ( $taxonomy == 'proyecto-category' ) { | |
$section_ancestors = get_ancestors( $term->term_id, $taxonomy ); | |
krsort( $section_ancestors ); | |
$termlink = home_url( '/proyecto/' ); | |
foreach ( $section_ancestors as $ancestor ) { | |
$section_ancestor = get_term( $ancestor, $taxonomy ); | |
$termlink .= $section_ancestor->slug . '/'; | |
} | |
$termlink .= trailingslashit( $term->slug ); | |
} | |
return $termlink; | |
} | |
add_filter( 'term_link', 'filter_proyecto_section_terms_link', 100, 3 ); | |
add_action( 'template_redirect', 'my_fancy_template_redirect' ); | |
function my_fancy_template_redirect(){ | |
global $wp_query; | |
// Check if we are querying proyecto-posts: | |
if ( $wp_query->query_vars['post_type'] == 'proyecto' ) { | |
// Then check if we are dealing with a single proyecto post or just multiple proyecto posts: | |
if ( is_single() ) { | |
locate_template( array( 'templates/proyecto-single.php' ), true ); | |
die(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function rewriting_resources($wp_rewrite) { | |
$rules = array(); | |
$terms = get_terms( array( | |
'taxonomy' => 'resource_type', | |
'hide_empty' => false, | |
) ); | |
$post_type = 'resources_cpt'; | |
foreach ($terms as $term) { | |
// Is it a child term? | |
if( $term->parent ) { | |
$ancestors = get_ancestors( $term->term_id, $term->taxonomy, 'taxonomy' ); | |
foreach ( (array)$ancestors as $ancestor ) { | |
$ancestor_term = get_term($ancestor, $term->taxonomy); | |
$hierarchical_slugs[] = $ancestor_term->slug; | |
} | |
$hierarchical_slugs = array_reverse($hierarchical_slugs); | |
$hierarchical_slugs[] = $term->slug; | |
$rules['resources/' . implode('/', $hierarchical_slugs ) . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&' . $post_type . '=$matches[1]&name=$matches[1]'; | |
} else { | |
$rules['resources/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&' . $post_type . '=$matches[1]&name=$matches[1]'; | |
} | |
} | |
// merge with global rules | |
$wp_rewrite->rules = $rules + $wp_rewrite->rules; | |
} | |
add_filter('generate_rewrite_rules', 'rewriting_resources'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment