仅针对特定用户角色在Woocommerce中自定义我的帐户终结点

时间:2019-08-19 11:25:00

标签: php wordpress woocommerce endpoint account

在woocommerce文档之后,我在woocommerce的“我的帐户”页面中添加了一个内部结局。

我想让此端点仅对特定用户角色可见,例如shop_manager。

是否可以重定向到尝试直接访问该端点的404页面用户?

谢谢。

2 个答案:

答案 0 :(得分:1)

假设您已经为我的帐户部分(see this related answer)创建了一个自定义终结点,则可以使用template_redirect钩子以以下简单方式将所有不允许的用户角色重定向到特定页面:

add_action( 'template_redirect', 'custom_endpoint_redirection' );
function custom_endpoint_redirection() {
    $allowed_user_role = 'administrator';
    $custom_endpoint   = 'my-custom-endpoint';

    if ( is_wc_endpoint_url($custom_endpoint) && ! current_user_can($allowed_user_role) ) {
        $redirection_url = home_url( '/404/' );

        wp_redirect( $redirection_url );
        exit;
    }
}

您需要指定自定义端点,允许的用户角色和url重定向。

代码进入活动子主题(或活动主题)的functions.php文件中。可以。


相关:

答案 1 :(得分:0)

只需在活动主题的functions.php中添加以下代码段,这仅适用于administrator用户角色,您可以根据自己的需要进行更改-

function add_custom_my_account_endpoint() {
    add_rewrite_endpoint( 'shop_manager', EP_PAGES );
}
add_action( 'init', 'add_custom_my_account_endpoint' );

function add_custom_wc_menu_items( $items ) {
    $user = wp_get_current_user();
    if( $user && in_array( 'administrator', $user->roles ) ){
        $items[ 'shop_manager' ] = __( 'Shop Manager', 'text-domain' );
    }
    return $items;
}
add_filter( 'woocommerce_account_menu_items', 'add_custom_wc_menu_items' );

function add_shop_manager_endpoint_content(){
    $user = wp_get_current_user();
    if( $user && !in_array( 'administrator', $user->roles ) ) return;
    echo "Your content goes here";
}
add_action( 'woocommerce_account_shop_manager_endpoint', 'add_shop_manager_endpoint_content' );

在此之后,只需从后端设置>永久链接中flush_rewrite_rules。就是这样。