我需要限制没有特定功能的用户查看特定页面。我不能使用短代码或类似的东西,我只想在它们到达页面URL时重定向它们。
我想通过向函数中添加一些内容来实现这一点。php文件。。。我想代码应该是这样的。。。
// hook on_page_load() into wordpress page load
function on_page_load($current_page_ID) {
if( $current_page_ID == 1234 && is_user_logged_in() &&
current_user_can(\'do_something_special\')) {
return; // allow it to continue
} else {
// otherwise
die(); // or redirect or whatever
}
}
我不太清楚如何拦截每个页面的加载,以查看他们是否要转到posts页面。有人能帮忙吗?还是有更优雅的方式来实现这一点?谢谢
最合适的回答,由SO网友:cybmeta 整理而成
如果要重定向,可以使用以下事件template_redirect
:
add_action( \'template_redirect\', \'my_page_template_redirect\' );
function my_page_template_redirect() {
// You can skip is_user_logged_in() if checking the user capability
if( is_page( 1234 ) && ! current_user_can( \'do_something_special\' ) ) {
$redirect_to = \'http://example.com/redirection-page\';
// Default code status for redirection using wp_redirect is 302
// If you need a different status code check
// https://codex.wordpress.org/Function_Reference/wp_redirect
wp_redirect( esc_url_raw( $redirect_to ) );
exit();
}
}
您可以找到有关
template_redirect
in the Codex.
由于您的问题是关于“如何拦截每个页面加载”,我认为您应该开始阅读法典中的以下条目:
- Plugin API
- Action definition 和actions reference
- Filter definition 和filters reference基本上,动作是WordPress处理请求时发生的事件。他们每个人都有权“拦截”请求并执行操作。由于它们发生在不同的时刻,您可以根据需要执行的操作选择要使用的最佳操作。
在这种情况下,当请求某个页面并且用户分配了一些能力时,关于重定向,template_redirect
可能是拦截请求的合适时机。根据此操作的文档:“如果您需要在完全了解所查询内容的情况下执行重定向,那么这是一个很好的挂钩”。