Advertisement
mbis

WCFM Marketplace - remove store permalink base

Aug 12th, 2020 (edited)
1,996
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.26 KB | None | 0 0
  1. function pm_detect_store_permalinks($query) {
  2.     global $wpdb, $pm_query, $wp, $wp_rewrite, $WCFMmp;
  3.  
  4.     // Do not run when Elementor is opened
  5.     if((!empty($_REQUEST['action']) && strpos($_REQUEST['action'], 'elementor') !== false) || isset($_REQUEST['elementor-preview'])) {
  6.         return $query;
  7.     }
  8.  
  9.     // Do not run if custom permalink was detected
  10.     if(!empty($pm_query['id'])) {
  11.         return $query;
  12.     }
  13.  
  14.     // Do not run if no WCFM endpoints are available
  15.     if(empty($WCFMmp)) {
  16.         return $query;
  17.     }
  18.  
  19.     // Get WCFM endpoints
  20.     $endpoints = implode('|', array('about', 'policies', 'reviews', 'followers', 'followings', 'articles', 'products'));
  21.  
  22.     // 1. Get the store slug (& endpoint if any)
  23.     preg_match("/([^\/]+)(?:\/({$endpoints}))?/", $wp->request, $parts);
  24.  
  25.     if(!empty($parts[1])) {
  26.         $store_name = basename($parts[1]);
  27.  
  28.         // 2. Check if the slug is assigned to any vendor
  29.         $vendor = get_user_by('slug', $store_name);
  30.  
  31.         if(!empty($vendor->user_nicename)) {
  32.             if(!empty($query['paged'])) {
  33.                 $page = $query['paged'];
  34.             } else if(!empty($query['page'])) {
  35.                 $page = $query['page'];
  36.             } else {
  37.                 $page = 0;
  38.             }
  39.  
  40.             $store_base_slug = get_option('wcfm_store_url', 'store');
  41.  
  42.             $new_query = array(
  43.                 'post_type' => 'product',
  44.                 $store_base_slug => $vendor->user_nicename,
  45.                 'paged' => $page,
  46.                 'do_not_redirect' => 1,
  47.             );
  48.  
  49.             // Set the endpoint
  50.             if(!empty($parts[2])) {
  51.                 $new_query[$parts[2]] = true;
  52.             }
  53.         }
  54.  
  55.         // 3. Overwrite the query object & disable canonical redirect
  56.         if(!empty($new_query)) {
  57.             remove_action('template_redirect', 'wp_old_slug_redirect');
  58.             remove_action('template_redirect', 'redirect_canonical');
  59.             add_filter('wpml_is_redirected', '__return_false', 99, 2);
  60.             add_filter('pll_check_canonical_url', '__return_false', 99, 2);
  61.  
  62.             $query = $new_query;
  63.  
  64.             if(isset($_GET['debug_query'])) {
  65.                 echo '<pre>';
  66.                 print_r($query);
  67.                 print_r($new_query);
  68.                 echo '</pre>';
  69.             }
  70.         }
  71.     }
  72.  
  73.     return $query;
  74. }
  75. add_filter('request', 'pm_detect_store_permalinks', 9999);
  76.  
  77. function pm_remove_store_base($url, $user_id) {
  78.     $store_base_slug = get_option('wcfm_store_url', 'store');
  79.  
  80.     return str_replace("/{$store_base_slug}/", '/', $url);
  81. }
  82. add_filter('wcfmmp_get_store_url', 'pm_remove_store_base', 10, 2);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement