首页 > 解决方案 > WordPress 根据用户角色在首页隐藏帖子

问题描述

我有自定义用户角色“广告商”,并希望从首页排除他们的帖子“由广告商角色的用户发布”。

标签: wordpress

解决方案


pre_get_posts例如,拥有一个“广告”类别并用于从您的查询中排除该类别会更容易。每次广告商发布新帖子时,他都需要添加此类别。

例如


add_action('pre_get_posts', 'front_page_pre_get_posts');
function front_page_pre_get_posts($query) {

  if(is_front_page() && $query->is_main_query()) {
     $query->set('category__not_in', array(1)); // Replace 1 by the category ID

  }

}

我知道这不是您的具体问题的答案。这更像是一个建议。我将测试一些代码来完全按照您的要求进行操作,然后我会用它来更新我的答案。

更新

未经测试,但这样的事情应该可以工作。

  • 添加一个钩子pre_get_posts
  • 首先,您获得具有所需角色的用户
  • 然后您在查询中排除这些作者

add_action('pre_get_posts', 'front_page_pre_get_posts');
function front_page_pre_get_posts($query) {
  // Get the users related to your role
  $args = array(
    // The role you want to exclude in your get post
    'role'   => 'advertiser',
    // Will return an array of ids
    'fields' => 'ids'
  );
  $users = get_users($args);


  if(is_front_page() && $query->is_main_query()) {
    // To exclude authors you can add a "-" before the id id of the author
    $query->set('author', '-'.implode(',-', $users)); // Will generate a string like "-1,-45,-48"

  }
}

推荐阅读