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

Php 仅针对特定用户角色在Woocommerce中自定义我的帐户终结点,php,wordpress,woocommerce,endpoint,account,Php,Wordpress,Woocommerce,Endpoint,Account,在woocommerce文档之后,我在woocommerce的帐户页面中添加了一个endpoit 我想让这个端点只对特定的用户角色可见,比如说shop_manager 有没有办法重定向到试图直接访问该端点的404页用户 提前感谢。只需在活动主题的functions.php中添加以下代码片段,这仅适用于管理员用户角色,您可以根据需要进行更改- function add_custom_my_account_endpoint() { add_rewrite_endpoint( 'shop_ma

在woocommerce文档之后,我在woocommerce的帐户页面中添加了一个endpoit

我想让这个端点只对特定的用户角色可见,比如说shop_manager

有没有办法重定向到试图直接访问该端点的404页用户


提前感谢。

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

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' );

在此之后,只需从后端设置>永久链接刷新\u重写\u规则。就是这样。

假设您已经为“我的帐户”部分()创建了自定义端点,您可以使用
template\u redirect
hook以以下简单方式将所有不允许的用户角色重定向到特定页面:

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文件。它可以工作


相关的:


如果一个非特权用户试图直接访问端点,他没有看到任何错误消息,我问的是是否可以在404页上重定向。然后只需添加一个
If-else
逻辑,对于非特权用户,将它们重定向到404页,如-
If($user&&!in_数组('administrator',$user->roles)){global$wp_query;$wp_query->set_404();status_header(404);get_template_part(404);exit();}否则{echo“您的内容在这里”}