我正在使用author.php
作为作者页。我已经将作者基础slug更改为profile,这样帖子作者就可以在网站上查看他们的作者页面。com/配置文件/名称
由于这些基本上是个人资料页,我不想让公众看到他们,所以如果你访问网站。com/profile/name,并且没有登录,应该要求您登录。如果您登录并访问其他人的个人资料页面的URL,它会将您重定向回您的个人资料。我被这件事困住了。我在另一篇帖子中发现了这一点,我认为这是一个开始:
<?php
add_action( \'template_redirect\', \'wpse14047_template_redirect\' );
function wpse14047_template_redirect()
{
if ( is_author() ) {
$id = get_query_var( \'author\' );
// get_usernumposts() is deprecated since 3.0
$post_count = count_user_posts( $id );
if ( $post_count <= 0 ) {
//include( STYLESHEETPATH .\'/author-redirect.php\' );
wp_redirect( home_url() );
exit;
}
}
}
最合适的回答,由SO网友:cybmeta 整理而成
如果我理解正确的话,像您这样基于帖子计数的重定向是错误的。您需要检查当前用户是否与作者的个人资料相同;如果是相同的,什么都不做,它是不一样的,重定向到自己的配置文件;如果是来宾用户,请重定向到登录页面:
add_action( \'template_redirect\', \'cyb_template_redirect\' );
function cyb_template_redirect() {
// Check if we are on author template
if ( is_author() ) {
// Check if current user is logged in
if( is_user_logged_in() ) {
// User is logged in
// Get the id of the user being displayed
$viewing_profile_id = get_query_var( \'author\' );
// Get the id of current user
$current_user_id = get_current_user_id();
// if current user and profile being displayed is not the same,
// then redirect to current user author page
if ( $viewing_profile_id != $current_user_id ) {
wp_redirect( get_author_posts_url( $current_user_id ) );
exit;
}
} else {
// User is not logged in, redirect to login with redirect parameter
// set to current user profile url, so the user will be redirected to
// own profile if login is successful
wp_redirect( wp_login_url( get_author_posts_url( $current_user_id ) ) );
exit;
}
}
}
注意:代码未经测试,仅在此处编写