quarta-feira, 13 de fevereiro de 2013

Posts relacionados com miniaturas e sem plugin

codigo para gerar posts relacionados por tags com miniaturas e o titulo da postagem
é só inserir dentro do arquivo single.php do seu tema
e os ultimos cinco posts com a mesma tag vao aparecer bem simples e sem uso de plugins

<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  $first_tag = $tags[0]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5,
    'caller_get_posts'=>1
   );
 
  $rel_posts = new WP_Query($args);
  if( $rel_posts->have_posts() ) {
    while ($rel_posts->have_posts()) : $rel_posts->the_post(); ?>
 
<div class="rel_posts">
<div class="rel_thumb"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(array(130,130)); ?></a></div>
<div class="rel_link"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></div>
</div>
<?php
endwhile;
}
}
?>
 
<div class="clearer"></div>

quinta-feira, 31 de maio de 2012

Integração bbpress e wordpress

Aqui onde trabalho, surgiu a ideia de criar um fórum de discussão,
como tive algumas dificuldades na instalação, vou documentar passo a passo, a instalação e configuração

1° passo
baixe o bbpress, eu preferi instalar no site bbpress.org
crie um subdiretório dentro do diretório onde o wordpress estiver instalado no meu caso criei /forum
acesse o endereço geralmente http://seusite.com.br/forum
aparecera uma tela semelhante a tela da primeira instalação do wordpress, pedindo pra você, inserir os dados de acesso do banco de dados, você tem que inserir as mesmas informações do wordpress, para a integração,

2° passo
aqui é onde vamos integrar os dados do wordpress + bbpress para que os dados enviados pelos cookies sejam os mesmos para que você possa logar simultaneamente nos dois sites, os valores abaixo podem ser pegos do seu arquivo wp-config.php que fica na raiz da instalação do wordpress


define('AUTH_KEY', ' valores do seu  wordpress');
define('SECURE_AUTH_KEY', ' valores do seu  wordpress');
define('LOGGED_IN_KEY', ' valores do seu  wordpress');
define('NONCE_KEY', ' valores do seu  wordpress');
define('AUTH_SALT', ' valores do seu  wordpress');
define('SECURE_AUTH_SALT', ' valores do seu  wordpress');
define('LOGGED_IN_SALT', ' valores do seu  wordpress');
define('NONCE_SALT', ' valores do seu  wordpress');


3° passo
após copiar os valores, essa parte é mais simples, você deve preenccher o nome do forum, a url, e a chave mãe da conta do usuario que vai ficar como super-administrador.

4° passo
após instalado você pode baixar a tradução para portugues, acessando o link, faça o upload do arquivo pt_BR.mo para a pasta forum/my-languages, caso essa pasta nao exista você pode cria-la.
Após isso você deve alterar a linha

define('BB_LANG',''); 

do arquivo bb-config.php para

define('BB_LANG','pt_BR'); 

pronto?
no meu caso ainda não, porque embora eu consiga logar nos dois sites simultaneamente, quando eu logo no wordpress e vou para o forum, em seguida tento acessar a administração do fórum, encontrava um problema, pois invés de carregar a administração do fórum ele simplesmente retornava para a pagina inicial do fórum, não retornando nenhum erro somente nao carregando a pagina do painel do admin, pesquisei um bocado, e enfim encontrei uma solução, baixei esse plugin e instalei ele no wordpress, ativei e na configuração, simplesmente inseri a url do fórum, no campo requerido e salvei, e pronto agora sim os dois estavam com logins de usuários integrados, utilizando a mesma base de dados, ou seja, inserindo um novo usuário em um ou em outro estará simultaneamente nos dois sistemas, e conseguia acessar o admin do fórum sem problemas,



é isso ai, espero ter ajudado
até a proxima







quarta-feira, 9 de maio de 2012

Paginação wordpress PageNavi

Bem hoje precisei paginar minhas paginas do blog, assim como a de produtos da loja virtual, entao instalei o plugin WP-PageNavi, muito facil de usar e personalizar, 
apos instalar você coloca a seguinte linha no local onde deseja que a paginação seja mostrada, 

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); }?>

no meu caso inseri no index.php de meu tema que é onde o blog esta, e pronto a paginação mostrada, então removi essas linhas que mostravam os links padrões para posts antigos,


<?php next_posts_link(__('&laquo; Older Entries', 'kubrick')) ?>


<?php previous_posts_link(__('Newer Entries &raquo;', 'kubrick')) ?>


e resolvi meu problema com paginação




abraço até a proxima

sexta-feira, 4 de maio de 2012

Exigir login em pagina com retorno automatico

Hoje precisei criar uma função que quando o usuário visitasse uma pagina que por algum motivo precisasse que esse mesmo usuário estivesse logado para ter acesso a esse conteúdo.
um redirect seria simples, verifico se o usuário esta logado, se não mando para a pagina de login, para isso temos varias funções, a wp_redirect() do wordpress, a header do php daria um jeito nisso, porem para que ficasse mais profissional, e que após o login o usuário fosse redirecionado ao logar, com essa função isso é possivel, ao chama-la em uma página automaticamente o usuário vai ser direcionado para a pagina de login ja com a instrução de retorno após o login enviada pela url, ela deve ser adicionada no arquivo functions de seu tema, o codigo esta todo comentado e qualquer duvida é só deixar um comentário

function redireciona_login(){
$pagina_id = get_the_ID();
$urlFull = get_permalink();

//aqui removo a ultima barra do link para usar no redirecionamento
$url = substr_replace($urlFull, '', -1);

//a função urlencode trata o texto para o formato de link
$urlCompleto = 'http://site.com.br/wp-login.php?redirect_to=' . urlencode($url) . '&reauth=1';
echo "<script type=\"text/javascript\">window.location='$urlCompleto';</script>";
// echo $urlCompleto;
// header("location:$urlCompleto"); die();
// echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=$urlCompleto'>";
}





Aqui eu chamo a função, você pode colocar na pagina esse codigo e isso ja deve funcionar

 if (!is_user_logged_in()){
redireciona_login ();
}

quinta-feira, 3 de maio de 2012

Função para BreadCrumbs Wordpress

Tive que modificar os Breadcrumbs, de um plugin wiki que instalei aqui em minha aplicação wordpress,
então pesquisei, e achei algumas funções e plugins de breadcrumbs, porem precisava de uma função que poderia ser chamada de uma pagina ou outra, e que mostrasse todas as paginas mães relacionadas ao post,

achei esta que mostra todo o caminho, até a home, você coloca dentro do arquivo functions do seu tema, e chama ela nas paginas onde for necessario

function wsf_make_link ( $url, $anchortext, $title=null, $nofollow=false ) {  

   if ( $title == null ) $title=$anchortext;  
   $nofollow==true ? $rel=' rel="nofollow"' : $rel = '';   
  
   $link = sprintf( '<a class="incsub_wiki_crumbs" href="%s" title="%s" %s="">%s</a>', $url, $title, $rel, $anchortext );  
   return $link;  
}

function wsf_breadcrumbs( $sep = '/') {
 
    global $post;
 
   // Do not show breadcrumbs on home or front pages.
   // So we will just return quickly
   if((is_home() || is_front_page()) && (!$front_page))
      return;
 
    // Create a constant for the separator, with space padding.
    $SEP = ' ' . $sep . ' ';
 
  echo '
<div class="breadcrumbs">';
  $wiki_home = "http://ema.net.br/emawiki/";
  echo wsf_make_link( get_bloginfo('url'), 'Home', get_bloginfo('name'), true ) . $SEP;

  if(is_single()) {
    the_category(', '); echo $SEP;
    }
    elseif(is_page()) {
            $parent_id = $post->post_parent;
            $parents = array();
            while($parent_id) {
                $page = get_page($parent_id);
            $parents[]  = wsf_make_link( get_permalink($page->ID), get_the_title($page->ID) ) . $SEP;
                $parent_id  = $page->post_parent;
            }
            $parents = array_reverse($parents);
            foreach($parents as $parent) {
                echo $parent;
            }
   }
   // Wordpess function that echoes your post title.
   the_title();
     echo '</div>

';



até a próxima.

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/