我想到了两个选择。哪一个取决于登录/未登录内容的不同程度。
1) 首先,您可以在主页模板上使用IF语句。
$current_user = wp_get_current_user();
$user = new WP_User( $current_user ->ID);
if($user && in_array(\'my-role\', $user->roles)){
//stuff specific to users with \'my-role\'
}
.
.
.
else{
//stuff for non logged in users or ones that don\'t match any of your roles
}
2)第二个选项是根据模板的角色过滤模板。你可以在
template_include
滤器参见法典中的示例:
https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include. 使用此选项,您可以为不同的用户提供多个模板,如果您与模板命名约定保持一致,则可以动态使用不同的模板。
希望这会有所帮助。根据您选择的选项,我可以提供一些更详细的代码示例。
UPDATED
根据您评论中的信息,下面是一个使用
template_include
过滤器挂钩。您可以将其放入函数中。php。未测试代码:
function wpse_273872_template_include($template) {
//if user is not logged in, just return and show the default homepage
if(!is_user_logged_in()) return $template;
$new_template = \'\';
$current_user = wp_get_current_user();
$user = new WP_User( $current_user->ID);
if(in_array(\'candidate\', $user->roles)){ //assuming the role name is candidate
$new_template = locate_template( array( \'homepage-candidate.php\' ) );
}
elseif(in_array(\'company\', $user->roles)){ //assuming the role name is company
$new_template = locate_template( array( \'homepage-company.php\' ) );
}
if ( \'\' != $new_template ) {
$template = $new_template;
}
return $template;
}
add_filter( \'template_include\', \'wpse_273872_template_include\' );
主页候选人。php和主页公司。php是驻留在主题文件夹中的模板文件。以下是文件结构的示例:
- my-custom-theme
|- style.css
|- functions.php
|- frontpage.php
|- homepage-candidate.php
|- homepage-company.php