如果访客尝试访问特定页面,则重定向访客

时间:2018-05-01 作者:Dim13i

当我开发一个网站并进行一些测试时,我想阻止非管理员(最终是非编辑)访问特定页面,如woocommerce商店和相关页面。

有没有一种不使用插件的方法functions.php 要检查:

$list_of_blocked_pages = [ \'shop\', \'cart\', \'checkout\', \'etc...\' ];

if ( current_page_is_in( $list_of_blocked_pages ) && !admin && !editor ) {
    redirect_to_page( $url );
}

2 个回复
最合适的回答,由SO网友:JItendra Rana 整理而成

您可以使用template_redirect 根据您的条款重定向特定用户的操作。在WordPress确定要加载哪个模板页面之前,这个操作挂钩就会执行。如果您需要在完全了解所查询内容的情况下进行重定向,那么这是一个很好的挂钩。

您可以使用is_page 函数用于检查当前页面是否在页面列表中。

add_action( \'template_redirect\', \'redirect_to_specific_page\' );

function redirect_to_specific_page() {
    if ( is_page(\'slug\') && ! is_user_logged_in() ) {
        wp_redirect( \'http://www.example.dev/your-page/\', 301 ); 
        exit;
    }
}

SO网友:Dim13i

我最终解决了如下问题:

function block_woocommerce_pages_for_guest() {
    $blocked_pages =  is_woocommerce() || is_shop() || is_cart() || is_checkout() || is_account_page() || is_wc_endpoint_url();
    if( !current_user_can(\'administrator\') && !current_user_can(\'editor\') && $blocked_pages ) {
        wp_redirect(\'/\');
        exit;
    } 
}
add_action( \'wp\', \'block_woocommerce_pages_for_guest\', 8 );
这样,所有非管理员和非编辑器都将重定向到主页。

结束

相关推荐

Stuck In a Redirect Loop

我正在尝试构建一个代码,让非成员重定向到登录页。不幸的是,我构建的代码部分工作,并导致重定向循环。if(is_user_logged_in() && function_exists(\'pmpro_hasMembershipLevel\') && pmpro_hasMembershipLevel()) { global $current_user; $current_user->membership_level = pmpro_getM