Oculte completamente os produtos de usuários não autorizados no WooCommerce

Kolawole Emmanuel Izzy

Estou tentando remover um produto / produtos completamente de Usuários que não estão logados e se o usuário não tem uma função específica (por exemplo, Comprador verificado).

Consegui criar uma nova função chamada Comprador verificado usando o código abaixo;

add_role(
    'verified_buyer',
    __( 'Verified Buyer', 'text-domain' ),
    array(
       'read'         => true,  
        'edit_posts'   => false,
    )
);
//This Role is same role capability as the WooCommerce Customer role

e também adicionei uma caixa de seleção à página Adicionar novo produto do WooCommerce usando o código abaixo

function hide_product_from_unathorised_users() {
  $args = array(
    'id' => '_hide_from_unauthorize_users',
    'label' => 'Hide Product from unauthorized users',
    'desc_tip' => true,
    'description' => __('Check this to hide this product from unauthorized users', 'text-domain')
  );
  woocommerce_wp_checkbox( $args );
}

add_action( 'woocommerce_product_options_advanced', 'hide_product_from_unathorised_users' );

// Save Fields
function product_custom_fields_save($post_id){
    // Custom Product Text Field
    $hide_product_unathorised_users = isset( $_POST['_hide_from_unauthorize_users'] ) ? 'yes' : 'no';
        update_post_meta($post_id, '_hide_from_unauthorize_users', esc_attr( $hide_product_unathorised_users ));
}
add_action('woocommerce_process_product_meta', 'product_custom_fields_save');

Agora que tenho essas duas opções (função do usuário e uma caixa de seleção para saber qual produto ocultar) ... Desejo ocultar esse produto se as seguintes condições forem atendidas;

OCULTAR COMPLETAMENTE O PRODUTO (Mesmo nas consultas de pesquisa) SE;
1. A caixa de seleção está marcada no produto e o usuário não está conectado
2. A caixa de seleção está marcada no produto e o usuário está conectado e não verificado Comprador ou função de administrador

Como isso

function hide_product_completely_conditionally() {

global $post;

$hide_product_checkbox = get_post_meta( $post->ID, '_hide_from_unauthorize_users', true )

$user = wp_get_current_user();
$authorized_user_role = in_array( 'verified_buyer', (array) $user->roles );
$admin_role = in_array( 'administrator', (array) $user->roles );

    if ( ($hide_product_checkbox == 'yes' && !is_user_loggedin()) || ($hide_product_checkbox == 'yes' && is_user_loggedin() && (!$authorized_user_role || !$admin_role) ) ) {

     //(...) HIDE SUCH PRODUCT COMPLETELY CODE THAT I'M NOT SURE HOW TO WRITE

    }
}

Obrigado pela sua ajuda antecipadamente.

LoicTheAztec

O código a seguir filtrará os produtos com base em um campo de produto personalizado quando os usuários não forem permitidos (e os redirecionará para a página de compras se tentarem acessar manualmente um produto protegido) .

// Conditional function checking for authorized users
function is_authorized_user(){
    if ( is_user_logged_in() ) {
        $user = wp_get_current_user();
        $caps = $user->allcaps;

        if ( ( isset($caps['edit_product']) && $caps['edit_product'] )
        || in_array( 'verified_buyer', $user->roles ) ) return true;
    }
    else return false;
}

// Filter product query (and search) from unauthorized users
add_filter( 'woocommerce_product_query_meta_query', 'only_authorized_users_meta_query', 10, 2 );
function only_authorized_users_meta_query( $meta_query, $query ) {
    // Hide specific products from unauthorized users
    if( ! is_authorized_user() && ! is_admin() ) {
        $meta_query['relation'] = 'OR';
        $meta_query[] = array(
            'key'     => '_hide_from_unauthorize_users',
            'value'   => 'no',
            'compare' => '='
        );
        $meta_query[] = array(
            'key'     => '_hide_from_unauthorize_users',
            'compare' => 'NOT EXISTS'
        );
    }
    return $meta_query;
}

// Security: Redirect unauthorized users if accessing prodtected products
add_action( 'template_redirect', 'only_authorized_users_redirect' );
function only_authorized_users_redirect() {
    // Specific products redirect for unauthorized users (to be sure)
    if( is_product() && ! is_authorized_user()
    && get_post_meta( get_the_id(), '_hide_from_unauthorize_users', true ) === 'yes' ) {
        wp_safe_redirect( get_permalink( wc_get_page_id( 'shop' ) ) );
        exit;
    }
}

O código entra no arquivo functions.php do seu tema filho ativo (ou tema ativo). Testado e funciona.


Em vez de usar uma função de usuário adicional, você pode:

1) Use a WC_Customer is_paying_customerpropriedade booleana como:

 if( WC()->customer->get_is_paying_customer() ) {
     // Is a playing customer
 } else {
     // NOT a playing customer
 }

2) Ou adicionar meta de usuário personalizado como:

 update_user_meta( get_current_user_id(), 'allowed_customer', '1' );

Então você verificará usando:

 if( get_user_meta( get_current_user_id(), 'allowed_customer', true ) ) {
     // Allowed customer
 } else {
     // NOT Allowed customer
 }

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Woocommerce - Classifique os produtos no carrinho por autor / usuário na configuração de vários fornecedores

Oculte variações específicas do produto de usuários não registrados no WooCommerce

Oculte todos os produtos com um status de estoque específico do catálogo WooCommerce

Ocultar preços de produtos e botões Adicionar ao carrinho, mas não variações para usuários não registrados no WooCommerce

Ocultar produtos específicos de usuários não registrados no WooCommerce

Exibir uma lista de produtos privados para usuários não registrados no WooCommerce

Oculte o método de envio específico para produtos específicos no Woocommerce

Oculte o método de envio específico para produtos específicos no Woocommerce

Oculte produtos "fora de estoque" com metadados personalizados no Woocommerce

Autenticação de formulários: como lidar com usuários autenticados não autorizados

Ocultar painel padrão do Catálogo de Produtos para todos os usuários no Sugarcrm

Substituição de preços variáveis de produtos no WooCommerce

Como restringir o acesso de usuários não autorizados a diferentes páginas do django

Esconder alguns botões para usuários não autorizados na tabela de dados jquery

Como os tokens de usuário do Kubernetes são autorizados?

Oculte produtos fora de estoque em arquivos de categorias específicas no Woocommerce

Oculte produtos fora de estoque apenas nas páginas de arquivo da loja no Woocommerce

Usuários de SQL que pedem mais de n produtos

WooCommerce: Localizando os produtos no banco de dados

Oculte opções de envio específicas com base em produtos ou categorias no WooCommerce

WooCommerce oculta todos os produtos de uma determinada categoria se não estiver logado

como agrupar todos os usuários em uma lista de produtos se eles tiverem o mesmo produto?

Ocultar produtos em destaque na loja WooCommerce e páginas de arquivos para usuários convidados ou para uma determinada função de usuário

Blazor impede ações POST para usuários não autorizados

Desfocar fotos para usuários não autorizados

como evitar que usuários não autorizados acessem uma página usando a rota de reação

nodejs: permite que o cliente use scripts, mas oculte os scripts dos usuários finais

Woocommerce desativa produtos, mas não em todos os lugares

Como editar o Shortcode de produtos recentes do Woocommerce para que mostre apenas os produtos publicados nos últimos 15 dias?