根据用户角色的动态主页

时间:2017-07-19 作者:ouanounou

我开发了wordpress网站咨询,我有不同的用户角色

我希望根据用户角色有不同的内容

因此,我有一个带有身份验证的登录页,根据用户角色登录,主页是不同的

所以我想说的是,制作这种东西的插件是否存在,或者是否可以为此编写代码

因此,总结一下:

不登录的主页是登录页用户登录的主页根据用户角色不同而不同

谢谢

4 个回复
最合适的回答,由SO网友:danbrellis 整理而成

要根据登录用户的角色在主页上使用不同页面的内容,可以执行以下操作:

在您的功能中。php文件添加以下代码:

function wpse_273872_pre_get_posts( $query ) {
  if ( $query->is_main_query() && is_user_logged_in() ) {
    //work-around for using is_front_page() in pre_get_posts
    //known bug in WP tracked by https://core.trac.wordpress.org/ticket/21790
    $front_page_id = get_option(\'page_on_front\');
    $current_page_id = $query->get(\'page_id\');
    $is_static_front_page = \'page\' == get_option(\'show_on_front\');

    if ($is_static_front_page && $front_page_id == $current_page_id) {
      $current_user = wp_get_current_user();
      $user = new WP_User($current_user->ID);
      if (in_array(\'cs_candidate\', $user->roles)) { //assuming the role name is cs_candidate
        $query->set(\'page_id\', [page-id-for-candidate-homepage]);
      } elseif (in_array(\'cs_employer\', $user->roles)) { //assuming the role name is cs_employer
        $query->set(\'page_id\', [page-id-for-employer-homepage]);
      }
    }
  }
}
add_action( \'pre_get_posts\', \'wpse_273872_pre_get_posts\' );
其作用是:

过滤wp\\u查询参数如果用户登录,您在主页上,这是主查询如果用户具有“候选人”角色,请将帖子id(p)设置为您创建的页面id,并将帖子类型更改为“页面”,类似地,如果用户具有角色雇主,请使用该页面的id

SO网友:danbrellis

我想到了两个选择。哪一个取决于登录/未登录内容的不同程度。

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

SO网友:ouanounou

我已经像这样直接在wordpress中创建了我的页面enter image description here

所以我现在在文件模板调用索引中只有一个主页。php

我的2页不在此文件中

SO网友:Christa Coetser

我使用重力表单,在用户注册时,我有一个自定义字段“Gravity”;用户类型2;。根据MySQL UserMeta表中的UserType2变量,我可以通过条件逻辑对重力表单中链接到主页的字段进行不同的访问。然后我可以想要多少就有多少。

这样,我就不需要对PHP文件进行任何更改。

结束

相关推荐

PLUGINS_LOADED操作工作不正常

我试图在表单提交后向用户发送电子邮件,但出现错误Call to undefined function wp_mail() in C:\\xampp\\htdocs\\wordpress\\wp-content\\plugins\\contact form\\contact-form-plugin.php on line 46<我在谷歌上搜索了一下,发现它与add_action( \'plugins_loaded\', \'functionShowForm\' );.我在代码中添加了这一行,但它在主窗