Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. <?php
  2. /* filter to get "services" in product categories, child categories, and singe product pages correctly */
  3. // /services/%product_cat%/ - permalinks 'base' settings
  4.  
  5. add_filter('rewrite_rules_array', function( $rules ) {
  6. $new_rules = array(
  7. 'services/([^/]*?)/page/([0-9]{1,})/?$' => 'index.php?product_cat=$matches[1]&paged=$matches[2]',
  8. 'services/([^/]*?)/([^/]*?)/page/([0-9]{1,})/?$' => 'index.php?product_cat=$matches[2]&paged=$matches[3]',
  9. 'services/([^/]*?)/?$' => 'index.php?product_cat=$matches[1]',
  10. 'services/([^/]*?)/([^/]*?)/?$' => 'index.php?product_cat=$matches[2]',
  11. );
  12. return $new_rules + $rules;
  13. });
  14.  
  15. add_filter('request', function( $vars ) {
  16. global $wpdb;
  17. if (!empty($vars['pagename']) || !empty($vars['category_name']) || !empty($vars['name']) || !empty($vars['attachment'])) {
  18. $slug = !empty($vars['pagename']) ? $vars['pagename'] : (!empty($vars['name']) ? $vars['name'] : (!empty($vars['category_name']) ? $vars['category_name'] : $vars['attachment'] ) );
  19. $new_slug = $vars["product_cat"] . "/$slug";
  20. $cat = getCategoryByPath($new_slug, 'product_cat');
  21. if($cat){
  22. $old_vars = $vars;
  23. $vars = array('product_cat' => $new_slug);
  24. if (!empty($old_vars['paged']) || !empty($old_vars['page']))
  25. $vars['paged'] = !empty($old_vars['paged']) ? $old_vars['paged'] : $old_vars['page'];
  26. }
  27. }elseif (!empty($vars['product_cat'])) {
  28. $slug = $vars['product_cat'];
  29. $cat = getCategoryByPath($slug, 'product_cat', 0);
  30.  
  31. if(!$cat && get_page_by_path( $slug, OBJECT, 'product')){
  32. $vars["product"] = $slug;
  33. $vars["post_type"] = "product";
  34. $vars["name"] = $slug;
  35. }
  36.  
  37. }
  38. return $vars;
  39. });
  40. function getCategoryByPath($path, $tax, $check_parent = 1 ){
  41. global $wpdb;
  42.  
  43. $slugs = explode('/', $path);
  44. $parent = 0;
  45. foreach ($slugs as $k => $slug) {
  46. $args = array(
  47. 'hide_empty' => false,
  48. 'slug' => $slug,
  49. );
  50. if($check_parent)
  51. $args['parent'] = $parent;
  52.  
  53. $terms = $terms = get_terms($tax, $args);
  54.  
  55. if($terms && count($terms) == 1){
  56. $term = $terms[0];
  57. $parent = $term->term_id;
  58.  
  59. if($k == count($slugs) - 1)
  60. return $term;
  61. }else{
  62. break;
  63. }
  64. }
  65. return false;
  66. }
  67. /* end of filter */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement