Change WordPress user roles and capabilities › Forums › Restrict or Permit access inside WordPress – how to › WooCommerce – My account -page restrict access to tabs › Reply To: WooCommerce – My account -page restrict access to tabs
04/10/2016 at 11:24
#2838
Vladimir
Keymaster
Try this variant. I removed the “Account Details” from the left menu items too, as it’s the only available my account endpoint and it’s not sense to place the link on the same page.
add_filter('woocommerce_account_menu_items', 'filter_wc_my_account_menu');
add_action('template_redirect', 'redirect_for_blocked_wc_pages');
function filter_wc_my_account_menu($items) {
if (!current_user_can('subscriber')) {
return $items;
}
if (isset($items['dashboard'])) {
unset($items['dashboard']);
}
if (isset($items['orders'])) {
unset($items['orders']);
}
if (isset($items['downloads'])) {
unset($items['downloads']);
}
if (isset($items['edit-address'])) {
unset($items['edit-address']);
}
if (isset($items['edit-account'])) {
unset($items['edit-account']);
}
if (isset($items['payment-methods'])) {
unset($items['payment-methods']);
}
return $items;
}
function redirect_from_blocked_url() {
$my_account_url = wc_get_endpoint_url('edit-account');
wp_redirect($my_account_url);
die;
}
function check_end_point_url($end_point, $current_url) {
$blocked_url = wc_get_endpoint_url($end_point);
if ($current_url==$blocked_url) {
redirect_from_blocked_url();
}
}
function redirect_for_blocked_wc_pages() {
global $wp, $wp_query;
if (!current_user_can('subscriber')) {
return;
}
if (is_account_page() && !is_wc_endpoint_url()) {
// block Woo My Account Dashboard;
redirect_from_blocked_url();
}
$current_url = trailingslashit(home_url($wp->request));
$blocked_end_points = array('dashboard', 'orders', 'downloads', 'edit-address', 'payment-methods');
foreach($blocked_end_points as $bep) {
check_end_point_url($bep, $current_url);
}
}