根据用户角色更改帖子状态

时间:2013-08-30 作者:ferne97

我有一个网站,我正在工作,在那里,用户每月支付费用,以便能够向网站添加内容,并且在注册时为他们分配一个自定义用户角色。当他们的订阅启动时,他们的用户角色将更改为订阅服务器。它使用重力形式和它们的授权。订阅的net插件。

// Set user role to subscriber after subscription expires
add_action( \'gform_authorizenet_subscription_canceled\', \'downgrade_user_role\', 10, 4 );

function downgrade_user_role( $entry, $subscription_id, $transaction_id, $new_payment_amount ) {
    $user = GFUserData::get_user_by_entry_id( $entry[\'id\'] );
    $user->set_role( \'subscriber\' );
}
然后,我试图找出如何在他们的订阅完成后更改帖子状态,以便内容不会处于活动状态,除非他们的订阅完成。当用户角色更改为订阅者时,我正在考虑将post状态更改为draft,但不确定如何执行该操作。

另一种选择是只在查询中包含特定用户角色的帖子,但也找不到这样做的方法。

有人对我如何做到这一点有什么想法或想法吗?谢谢

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

然后,我想知道一旦他们的订阅量增加,如何更改帖子状态

function downgrade_user_role( $entry, $subscription_id, $transaction_id, $new_payment_amount ) {
    $user = GFUserData::get_user_by_entry_id( $entry[\'id\'] );
    $user->set_role( \'subscriber\' );
    global $wpdb;
    $wpdb->query( $wpdb->prepare(
      "UPDATE $wpdb->posts SET post_status = \'draft\' WHERE post_author = %d
       AND post_status IN (\'publish\', \'future\')",
       $user->ID
    ) );
}
add_action( \'gform_authorizenet_subscription_canceled\', \'downgrade_user_role\', 10, 4 );
另一种选择是只在查询中包含特定用户角色的帖子,但也找不到这样做的方法。

function exclude_subscribers_posts( $query ) {
  if ( is_admin() || ! is_main_query() ) return;
  $subscribers = get_users( array(\'role\'=>\'subscriber\', \'fields\'=>\'ID\') );
  if ( $subscribers ) {
     $subscribers = implode(\',\', array_map(\'intval\', $subscribers));
     global $wpdb;
     $exclude = $wpdb->get_col(
       "SELECT ID FROM $wpdb->posts WHERE post_author IN ($subscribers)"
     );
     if ( empty($exclude) ) return $query;
     $include = (array) $query->get(\'post__in\');
     if ( $include ) {
       $query->set(\'post__in\', array_diff( $include, $exclude) );
     } else {
       $query->set(\'post__not_in\', $exclude);
     }
  }
}
add_action(\'pre_get_posts\',\'exclude_subscribers_posts\');
考虑到:

由于这些原因,选项1更快,只运行一次选项2较慢,并且在每个(主)查询上运行option 1 is much better, 只有当您出于任何原因绝对不能使用选项1时,才使用选项2。

结束

相关推荐