quarta-feira, 11 de abril de 2012

Filtrar produtos por nivel de usuario

O wordpress trabalha com niveis de usuario, que vao de 0 a 10, sendo 0 leitor e 10 administrador
aqui você pode ver esses niveis, peguei do wordpress

Capability Administrator Editor Author Contributor Subscriber
level_10
level_9
level_8
level_7
level_6
level_5
level_4
level_3
level_2
level_1
level_0

User Level to Role Conversion

embora nao seja mais utilizado pelo WP, ainda esta disponivel, e pode ser utilizado de uma forma bem util você consegue pegar qual o nivel do usuario logado através da seguinte função

if (is_user_logged_in()){
  $current_user = wp_get_current_user();
$user_id = $current_user->ID;
$user_info = get_userdata( $user_id); 
$user_level = $user_info->user_level;
$username = $user_info->user_login;
$first_name = $user_info->first_name;
$last_name = $user_info->last_name;
  }
para se mexer nesses niveis e criar novas capacidades dentro do blog utilizei o plugin


dentro do arquivo loop-products-cat.php na pasta woocommerce que é copiada para seu tema no momento da instalação, você pode colocar o seguinte codigo

<?php 

global $woocommerce, $woocommerce_loop, $product_category_found; 

$product_category_found = false;

?>

<?php 

foreach ($product_categories as $category) :

if ($category->parent != $product_category_parent) continue;

$product_category_found = true;

$woocommerce_loop['loop']++;
//informações do usuario
if (is_user_logged_in()){
  $current_user = wp_get_current_user();
$user_id = $current_user->ID;
$user_info = get_userdata( $user_id); 
$user_level = $user_info->user_level;
$username = $user_info->user_login;
$first_name = $user_info->first_name;
$last_name = $user_info->last_name;
  }
//vejo nivel de usuario e digo se ele pode ou nao ver alguma pagina
$restrito = '';
if($user_level < 3){
//aqui eu digo quais páginas usuários de nível menor que 3 não podem ver através do titulo da categoria
$restrito = array("Materiais de apoio","Impressos","Brindes","Presentes");
}
//se for diferente do array acima aparece caso seja menor que 3 o nível de usuário
if (!in_array($category->name, $restrito)){
?>
<li class="product sub-category <?php if ($woocommerce_loop['loop']%$woocommerce_loop['columns']==0) echo 'last'; if (($woocommerce_loop['loop']-1)%$woocommerce_loop['columns']==0) echo 'first'; ?>">

<?php do_action('woocommerce_before_subcategory', $category); ?>

<a href="<?php echo get_term_link($category->slug, 'product_cat'); ?>">

<?php do_action('woocommerce_before_subcategory_title', $category); ?>

<h3><?php echo $category->name; ?> <?php if ($category->count>0) : ?><mark class="count">(<?php echo $category->count; ?>)</mark><?php endif; ?></h3>

<?php do_action('woocommerce_after_subcategory_title', $category); ?>

</a>

<?php do_action('woocommerce_after_subcategory', $category); ?>

</li><?php
}
endforeach;
?>

dessa forma você coloca dentro do array quais categorias os usuarios que nao tem niveis de permissao podem ver, no meu caso utilizei pq temos franquias e somente elas podem ver algumas paginas e clientes nao.

essa foi mais uma necessidade que tive e essa foi a forma encontrada, pode ser que você encontre outra, se sim, avise para que possamos um ajudar o outro

até a proxima

Documentação php Extensão para Chrome e firefox


Uma extensão para chrome, para acessar rapidamente a documentação do php, digitando o nome da função, a extensão lista funções similares o que ajuda na localização da documentação da função desejada do php.
pode ser obtida no link
https://chrome.google.com/webstore/detail/kfiahljocaflpaiopilgpiochncgdnhd?hl=pt-br

um similiar para firefox pode ser obtido no link abaixo
https://addons.mozilla.org/pt-BR/firefox/addon/php-developer-toolbar/




segunda-feira, 2 de abril de 2012

Miniaturas woocommerce

Então, tive recentemente um problema com as miniaturas dos produtos no woocommerce, elas apareciam corretamente porém quanto geradas pelo WP ela apareciam alinhadas pela base, e como vendemos relatorios aqui precisava que o alinhamento fosse feito pelo topo pesquisei muito mas não encontrei algo que me ajudasse então modifiquei a função do woocommerce da seguinte forma.

Dentro do arquivo functions de seu tema coloque o seguinte codigo



function woocommerce_get_product_thumbnail( $size = 'shop_catalog', $placeholder_width = 0, $placeholder_height = 0 ) {
global $post, $woocommerce;

if (!$placeholder_width) $placeholder_width = $woocommerce->get_image_size('shop_catalog_image_width');
if (!$placeholder_height) $placeholder_height = $woocommerce->get_image_size('shop_catalog_image_height');

// if ( has_post_thumbnail() ) return get_the_post_thumbnail($post->ID, $size);
if ( has_post_thumbnail() ) return the_post_thumbnail(thumbnail);
else return '<img src="'.$woocommerce->plugin_url(). '/assets/images/placeholder.png" alt="Placeholder" width="'.$placeholder_width.'" height="'.$placeholder_height.'" />';
}

notem que tem uma linha comentada
// if ( has_post_thumbnail() ) return get_the_post_thumbnail($post->ID, $size);

foi aqui que mudei para
               if ( has_post_thumbnail() ) return the_post_thumbnail(thumbnail);

e assim as miniaturas se alinham a partir do topo, criando a função dentro de seu tema ela sobrepõe a função que esta no woocommerce-template.php na pasta do plugin woocommerce

espero ter ajudado alguem que tenha o mesmo problema,
até outro problema que consiga encontrar solução