Alterar status de publicação com base na function de usuário

Tenho um site no qual estou trabalhando onde os usuários pagam uma taxa mensal para poder adicionar conteúdo ao site e eles recebem uma function de usuário personalizada quando registrados. Quando a assinatura é subida, sua function de usuário é alterada para um assinante. Está usando Gravity Forms e seu plug-in authorize.net para a assinatura.

// 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' ); } 

Em seguida, estou tentando descobrir como alterar o status do post, uma vez que a assinatura é para o conteúdo, de modo que o conteúdo não seja ativo, a menos que a assinatura tenha sido. Eu estava pensando em mudar o status do post para o rascunho quando a function do usuário foi alterada para um assinante, mas não sei como fazer isso.

Outra opção seria include apenas as postagens por determinadas funções de usuário na consulta, mas ainda não conseguiu encontrar uma maneira de fazer isso.

Alguém tem algum pensamento ou idéia sobre como eu poderia conseguir isso? obrigado

Solutions Collecting From Web of "Alterar status de publicação com base na function de usuário"

Então, estou tentando descobrir como alterar o status da publicação assim que a assinatura for aberta

 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 ); 

Outra opção seria include apenas as postagens por determinadas funções de usuário na consulta, mas ainda não conseguiu encontrar uma maneira de fazer isso.

 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'); 

Considere isso:

  1. A opção 1 é mais rápida e é executada uma vez
  2. A opção 2 é mais lenta e é executada em cada consulta (principal)

Por essa razão, a opção 1 é muito melhor , use a opção 2 somente se você não puder usar a opção 1 por qualquer motivo.