Registrar campos personalizados em comum para páginas, posts e customposts no WordPress


Postado em 18 de outubro de 2011 por | Categorias: Custom Post Types | Tags: | Sem comentários » | Comentar


O código abaixo deve ser colocado no arquivo functions.php do seu tema. O código abaixo registra três campos personalizados referêntes a uma data (Dia, Mês e Ano) nos posts, nas páginas e em um custompost chamado novidades.

// Registrando um campos personalizados para todas as páginas e posts do sistema
$theme_metaboxes_restritos = array(
"dia" => array (
"name"      => "dia",
"default"   => "",
"label"     => __('Selecione o dia', 'mytheme'),
"type"      => "select",
"stilo"      => "width:150px;"
),

"mes" => array (
"name"      => "mes",
"default"   => "",
"label"     => __('Selecione o mês', 'mytheme'),
"type"      => "select",
"stilo"      => "width:250px;"
),

"ano" => array (
"name"      => "ano",
"default"   => "",
"label"     => __('Selecione o ano', 'mytheme'),
"type"      => "select",
"stilo"      => "width:150px;"
)

);

// Registra um custom post select
function custom_fields_box_content_restritos() {
global $post, $theme_metaboxes_restritos;
foreach ($theme_metaboxes_restritos as $theme_metabox) {
$theme_metaboxvalue = get_post_meta($post->ID,$theme_metabox["name"],true);
if ($theme_metaboxvalue == "" || !isset($theme_metaboxvalue)) {
$theme_metaboxvalue = $theme_metabox['default'];
}

echo "\t".'<p>';
echo "\t\t".'<label for="'.$theme_metabox['name'].'"style="font-weight:bold; ">'.$theme_metabox['label'].':</label><br>'."\n";
echo "\t\t".'<select name="'.$theme_metabox['name'].'" id="'.$theme_metabox['name'].'" style="'.$theme_metabox['stilo'].'"/>'."\n";

if ($theme_metabox['name'] == "dia"){
if($theme_metaboxvalue != "") {
echo "\t\t".'<option value="'.$theme_metaboxvalue.'" selected />'.$theme_metaboxvalue.'</option>'."\n";
echo "\t\t".'<option value="" />Selecione...</option>'."\n";
}
else echo "\t\t".'<option value="" selected />Selecione...</option>'."\n";

echo "\t\t".'<option value="1" />1</option>'."\n";
echo "\t\t".'<option value="2" />2</option>'."\n";
echo "\t\t".'<option value="3" />3</option>'."\n";
echo "\t\t".'<option value="4" />4</option>'."\n";
echo "\t\t".'<option value="5" />5</option>'."\n";
echo "\t\t".'<option value="6" />6</option>'."\n";
echo "\t\t".'<option value="7" />7</option>'."\n";
echo "\t\t".'<option value="8" />8</option>'."\n";
echo "\t\t".'<option value="9" />9</option>'."\n";
echo "\t\t".'<option value="10" />10</option>'."\n";
echo "\t\t".'<option value="11" />11</option>'."\n";
echo "\t\t".'<option value="12" />12</option>'."\n";
echo "\t\t".'<option value="13" />13</option>'."\n";
echo "\t\t".'<option value="14" />14</option>'."\n";
echo "\t\t".'<option value="15" />15</option>'."\n";
echo "\t\t".'<option value="16" />16</option>'."\n";
echo "\t\t".'<option value="17" />17</option>'."\n";
echo "\t\t".'<option value="18" />18</option>'."\n";
echo "\t\t".'<option value="19" />19</option>'."\n";
echo "\t\t".'<option value="20" />20</option>'."\n";
echo "\t\t".'<option value="21" />21</option>'."\n";
echo "\t\t".'<option value="22" />22</option>'."\n";
echo "\t\t".'<option value="23" />23</option>'."\n";
echo "\t\t".'<option value="24" />24</option>'."\n";
echo "\t\t".'<option value="25" />25</option>'."\n";
echo "\t\t".'<option value="26" />26</option>'."\n";
echo "\t\t".'<option value="27" />27</option>'."\n";
echo "\t\t".'<option value="28" />28</option>'."\n";
echo "\t\t".'<option value="29" />29</option>'."\n";
echo "\t\t".'<option value="30" />30</option>'."\n";
echo "\t\t".'<option value="31" />31</option>'."\n";
}

if ($theme_metabox['name'] == "mes"){
if($theme_metaboxvalue != "") {
echo "\t\t".'<option value="'.$theme_metaboxvalue.'" selected />'.$theme_metaboxvalue.'</option>'."\n";
echo "\t\t".'<option value="" />Selecione...</option>'."\n";
}
else echo "\t\t".'<option value="" selected />Selecione...</option>'."\n";

echo "\t\t".'<option value="01" />janeiro</option>'."\n";
echo "\t\t".'<option value="02" />fevereiro</option>'."\n";
echo "\t\t".'<option value="03" />março</option>'."\n";
echo "\t\t".'<option value="04" />abril</option>'."\n";
echo "\t\t".'<option value="05" />maio</option>'."\n";
echo "\t\t".'<option value="06" />junho</option>'."\n";
echo "\t\t".'<option value="07" />julho</option>'."\n";
echo "\t\t".'<option value="08" />agosto</option>'."\n";
echo "\t\t".'<option value="09" />setembro</option>'."\n";
echo "\t\t".'<option value="10" />outubro</option>'."\n";
echo "\t\t".'<option value="11" />novembro</option>'."\n";
echo "\t\t".'<option value="12" />dezembro</option>'."\n";
}

if ($theme_metabox['name'] == "ano"){
$ano_seguinte = date("Y") + 1;

if($theme_metaboxvalue != "") {
echo "\t\t".'<option value="'.$theme_metaboxvalue.'" selected />'.$theme_metaboxvalue.'</option>'."\n";

}
else echo "\t\t".'<option value="'.date("Y").'" selected />'.date("Y").'</option>'."\n";
echo "\t\t".'<option value="'.$ano_seguinte.'" />'.$ano_seguinte.'</option>'."\n";

}

echo "\t\t</select></p>\n";
echo "\t\t<p>".$theme_metabox['desc'].'</p>'."\n";
}
}

function custom_fields_box_projetos() {
if ( function_exists('add_meta_box') ) {
add_meta_box('theme-settings',__('Configurações', 'mytheme'),'custom_fields_box_content_restritos','page','normal','high');
add_meta_box('theme-settings',__('Configurações', 'mytheme'),'custom_fields_box_content_restritos','post','normal','high');
add_meta_box('theme-settings',__('Configurações', 'mytheme'),'custom_fields_box_content_restritos','novidades','normal','high');
}
}

add_action('admin_menu', 'custom_fields_box_projetos');

function custom_fields_insert_restritos($pID) {
global $theme_metaboxes_restritos;
foreach ($theme_metaboxes_restritos as $theme_metabox) {
$var = $theme_metabox["name"];
if (isset($_POST[$var])) {
if( get_post_meta( $pID, $theme_metabox["name"] ) == "" )
add_post_meta($pID, $theme_metabox["name"], $_POST[$var], true );
elseif($_POST[$var] != get_post_meta($pID, $theme_metabox["name"], true))
update_post_meta($pID, $theme_metabox["name"], $_POST[$var]);
elseif($_POST[$var] == "")
delete_post_meta($pID, $theme_metabox["name"], get_post_meta($pID, $theme_metabox["name"], true));
}
}
}

add_action('wp_insert_post', 'custom_fields_insert_restritos');

Para pegar os valores dos campos personalizados dentro de posts, páginas ou customposts use o código dentro do loop do WordPress:

 //Pega os campos personalizados
 $dia = get_post_meta($post->ID, 'dia', true);
 $mes = get_post_meta($post->ID, 'mes', true);
 $ano = get_post_meta($post->ID, 'ano', true); 

Pegar o nome e o ID da taxonomy corrente


Postado em 6 de junho de 2011 por | Categorias: Categorias, Custom Post Types | Tags: | 4 Comentários » | Comentar


O código abaixo usa a função get_the_terms() para exibir o nome e o ID da taxonomia (taxonomy) corrente.  Observe que neste caso a taxonomia foi definida no arquivo functions.php com o nome tipo. Basta trocar o nome da taxonomia para o nome que você declarou no arquivo functions do seu tema.

<!--   Pega o nome da Taxonomy corrente  -->
 <?php
 /** Função que busca o id da taxonomia (de nome tipo)**/
 $terms = get_the_terms( $post->ID , 'tipo');
 if($terms) {
 foreach( $terms as $term ) {
 $id_tax = $term->term_id;
 $nome_tax = $term->name;
 }
 }
 echo  $nome_tax . " - " . $id_tax;
 ?>

Listar posts que tenham um campo personalizado (Custom Field) com um determinado valor


Postado em 4 de maio de 2011 por | Categorias: Campos Personalizados, Custom Post Types, Loop no Wordpress | Tags: , , | 1 Comentário » | Comentar


Basta mudar criar uma query usando o comando meta_key que vai receber o nome do campo personalizado (Custom Field)  e o comando meta_value que vai receber o valor do campo personalizado.  No exemplo abaixo coloque a query antes do loop do WordPress para que seja lsitado somente posts que tiver o valor “sim” determinado para o custom post “destaque”:

<?php query_posts('meta_key=destaque&meta_value=sim'); ?>

Abaixo um exemplo de como fazer um loop do WordPress exibir os posts  de um custom post type de nome imprensa que tenham um campo personalizado (Custom Field) chamdo pagina_inicial com o valor igual a sim:

<ul>
<?php
$sql="SELECT * FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.id = wp_postmeta.post_id
WHERE post_type ='imprensa' AND post_status = 'publish'
AND wp_postmeta.meta_key = 'pagina_inicial' AND wp_postmeta.meta_value = 'sim'
ORDER BY wp_posts.post_date DESC";

$results = $wpdb->get_results($sql);

foreach ($results as $r) {
$cont1++;
if($cont1<4){
echo '<li><a href="' . $r->guid . '" title="' . $r->post_title . '"> ' . $r->post_title .'</a></li>';
}
}
?>
</ul>

Contar posts, custom posts e taxonomies no WordPress


Postado em 12 de abril de 2011 por | Categorias: Custom Post Types, Úteis | Tags: | 2 Comentários » | Comentar


Contar a quantidade de um determinado custom post type. No exemplo abaixo o custom post type se chama duvidas:

global $wpdb;
$numposts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type ='duvidas' AND post_status = 'publish'");

Contar a quantidade de uma taxonomia de id igual a 17:

global $wpdb;
$quantidade_posts = $wpdb->get_var("SELECT count FROM wp_term_taxonomy WHERE term_taxonomy_id = '17' ");

Contar a quantidade de posts regsitrados em uma determinada taxonomia. Este código funciona dentro de um arquivo de taxonomias (arquive). Primeiro é necessário pegar o ID da taxonomia corrente para depois contar quantos posts existem na taxonomia.

<?php if ( is_tax() ) {

 /** Função que busca o id da taxonomia (de nome categoria)**/
 $terms = get_the_terms( $post->ID , 'categoria');
 if($terms) {
 foreach( $terms as $term ) {

 $id_categoria_corrente = $term->term_id;
 }
 }
?>

Na segunda parte montamos o comando para contar a quantidade de posts da taxonomia ativa:

global $wpdb;
$numposts2 = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts INNER JOIN wp_term_relationships ON wp_posts.id = wp_term_relationships.object_id
INNER JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id WHERE wp_posts.post_type = 'duvidas' AND wp_posts.post_status = 'publish AND wp_term_taxonomy.term_id = '$id_categoria_corrente'");

WordPress marcar em qual página estou em um menu do sidebar


Postado em 12 de abril de 2011 por | Categorias: Custom Post Types | Sem comentários » | Comentar


O código abaixo exibe uma lista com 5 registros de um Custom Post Type chamado atuacao. O item da lista fica marcado conforme a página que o usuário esta visualizando atravéz da classe de css icone_pagina.

Primeiro pegue o título da página corrente com o comando abaixo:

<?php $pagenow = get_the_title(); ?>

 

Depois monte o loop com a lista dos custom post types:

<ul>
 <?
 $args = array(
 'numberposts' => 5,
 'post_type'=>'atuacao',
 'orderby'=>'title',
 'order'=>'ASC'
 );

 $posts_blog = get_posts($args);
 foreach($posts_blog as $blogp){
 ?>
 <li <?php if ($pagenow == $blogp->post_title) {echo 'class="icone_pagina"';} ?>>
 <a href="<? echo get_option('home') . '/atuacao/' .$blogp->post_name; ?>" title="Saiba mais sobre <?php echo $blogp->post_title; ?>" rel="bookmark"><?php echo $blogp->post_title; ?></a></li>
 <?php }  ?>
 </ul>


Criar uma lista de custom taxonomy e seus respectivos posts no WordPress


Postado em 29 de março de 2011 por | Categorias: Custom Post Types, Loop no Wordpress | Tags: | 1 Comentário » | Comentar


No código abaixo temos dois loops, o primeiro cria uma lista com os nomes das categorias personalizadas de nome “area_atuacao”. O segundo loop pega os posts registrados para cada categoria “area_atuacao”.

<?php
 $args=array(
 'orderby' => 'count',
 'taxonomy' => 'area_atuacao',
 'order' => 'DESC'
 );
 $categories=get_categories($args);
 foreach($categories as $category) {
?>
 <h2><?php echo $category->name; ?></h2>
 <?php echo $category->description; ?>
 <br />
 <br />
 <ul>
 <?php query_posts( array( 'post_type' => 'servico',  'orderby' => 'title', 'order' => 'ASC', 'area_atuacao'=>  $category->slug) );?>
 <?php if(have_posts()) : ?><?php while(have_posts()) : the_post() ?>
 <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" rel="bookmark"><?php the_title(); ?></a></li>
 <?php endwhile; endif; ?>
 </ul>
 <div style="clear:both; height:40px;"></div>
<?php }  ?>

Para registrar o custom post do código acima, coloque este código no arquivo functions.php do seu tema:

/** Criando um Custom Post Type **/
add_action('init', 'servicos_register');

function servicos_register() {

 $labels = array(
 'name' => _(utf8_encode('Serviços')),
 'singular_name' => _(utf8_encode('Serviços')),
 'add_new' => __(utf8_encode('Inserir Serviço')),
 'add_new_item' => __(utf8_encode('Adicionar serviço')),
 'edit_item' => __(utf8_encode('Editar serviço')),
 'new_item' => __(utf8_encode('Inserir serviço')),
 'view_item' => __(utf8_encode('Ver serviço')),
 'search_items' => __(utf8_encode('Buscar serviço')),
 'not_found' =>  __(utf8_encode('Nenhum serviço encontrado')),
 'not_found_in_trash' => __('Nada encontrado na Lixeira'),
 'parent_item_colon' => ''
 );

 $args = array(
 'labels' => $labels,
 'public' => true,
 'publicly_queryable' => true,
 'show_ui' => true,
 'query_var' => true,
 'rewrite' => true,
 'capability_type' => 'post',
 'hierarchical' => false,
 'menu_position' => 5,
 'supports' => array('title','excerpt','editor','thumbnail')
 );

 register_post_type( 'servico' , $args );
}

// --- Registrando nova categoria
$labels = array(
 'name' => __( utf8_encode('Área')),
 'singular_name' => __( utf8_encode('Área') ),
 'search_items' =>  __( 'Buscar' ),
 'popular_items' => __( 'Mais usadas' ),
 'all_items' => __( 'Todas' ),
 'parent_item' => null,
 'parent_item_colon' => null,
 'edit_item' => __( 'Adicionar nova' ),
 'update_item' => __( 'Atualizar' ),
 'add_new_item' => __( 'Adicionar nova' ),
 'new_item_name' => __( 'Nova' )
 );

register_taxonomy('area_atuacao', array('servico'),
 array(
 'hierarchical' => true,
 'labels' => $labels,
 'singular_label' => utf8_encode('Área'),
 'all_items' => utf8_encode('Todas as áreas'),
 'query_var' => true,
 'rewrite' => array( 'slug' => 'area' ))
 );

/** Fim Criando um Custom Post Type **/

 


Exibir o nome da taxonomy na tela


Postado em 18 de março de 2011 por | Categorias: Custom Post Types | Tags: | 1 Comentário » | Comentar


Quando criar uma lsita de categoria customizadas em custom_taxonomy, você pode precisar mostrar o nome da taxonomy de um determinado post, para isso use o comando abaixo:

<?php
global $post;
$terms = get_the_terms($post->id, 'segmentos');
$nome_taxonomy = $terms[0]->name;
echo $nome_taxonomy;
?>

Onde está escrito segmentos entra o nome da taxonomy que você declarou no arquivo functions.php.

Resumo do comando:

global $post;
$terms = get_the_terms($post->id, 'TAXONOMY_NAME');

$terms[0]->term_id;
$terms[0]->name;
$terms[0]->slug;
$terms[0]->term_group;
$terms[0]->term_taxonomy_id;
$terms[0]->taxonomy;
$terms[0]->description;
$terms[0]->parent;
$terms[0]->count;

Configurando os arquivos para Custom Post Types no WordPress


Postado em 3 de fevereiro de 2011 por | Categorias: Custom Post Types | Tags: | Sem comentários » | Comentar


Após declarar os códigos no arquivo functions.php para registrar posts do tipo Custom Post Types, você deve criar os arquivos PHP para exibir as informações dos novos custom posts no site.

Vamos começar criando uma página para exibir uma lista de posts personalizados do tipo Projetos (vamos supor que registramos no arquivo funtions.php do tema um Custom Post type chamado Projetos).

Para saber como registrar um Custom Post Type consulte:
http://codex.wordpress.org/Function_Reference/register_post_type
Primeiro cópie o arquivo page.php do seu tema e salve com o nome de page-projetos.php. Coloque o código abaixo no topo da página para criar uma página de template personalizada:

<?php
/*
Template Name: Projetos
*/
?>

Envie o arquivo para a pasta do tema em seu site. Acesse do painel de controle do WordPress crie uma nova página chamada Projetos, no box da esquerda chamado atributos da página selecione o item projetos nas opções de modelo.

Para criar uma lista de custom post types de Projetos use o loop abaixo:

<?php query_posts( array( 'post_type' => 'projetos',  'orderby' => 'date', 'order' => 'DESC', 'showposts' => 10) );?>
<?php if(have_posts()) : ?><?php while(have_posts()) : the_post() ?>
<div>

<div><? the_post_thumbnail( 'projetos_arquive' ); ?></div>

<div>
<h2><a href="<?php the_permalink();?>" rel="bookmark" title="saiba mais sobre <?php the_title();?>"><?php the_title();?></a></h2>
<?php the_excerpt(); ?>
<br />
<div><a href="<?php the_permalink();?>" rel="bookmark" title="saiba mais sobre <?php the_title();?>"><img src="<? bloginfo('stylesheet_directory'); ?>/images/botao_saiba_mais.jpg" alt="saiba mais sobre <?php the_title();?>"/></div>

</div>

<!--/area_colunas-->
</div>
<?php endwhile; endif; ?>

Observe o comando query_post antes do loop, nele temos definido que o loop vai gerar uma lista de 10 posts do tipo projetos ordenados por data de forma descendente (da data mais recente para menos recente).

Agora vamos montar o arquivo que vai ler o conteúdo do post personalizado. Basta fazer uma cópia do arquivo single.php e chamar de single-projetos.php.

Outros exemplos:

o arquivo single vai ser com o nome do Custom Post Type, no nosso exemplo criamos um Custom Post Type chamado musicas:
single-musicas.php

O arquivo para chamar as categorias criadas será com o nome registrado para taxonomy, no caso tipos:
taxonomy-genero.php

Saiba mais em: http://codex.wordpress.org/Function_Reference/register_post_type


Exibir imagem de um Custom Post Types


Postado em 24 de janeiro de 2011 por | Categorias: Custom Post Types, Thumbnail | Tags: | Sem comentários » | Comentar


Abaixo dois exemplos de como exibir uma imagem de um Custom Post Type em dois loops diferentes na mesma página. O primeiro loop vai pegar um post de forma randômica do Custom Post Type regsitrado como banners:


<?

$args = array(
 'numberposts' => 1,
 'post_type'=>'banners',
 'orderby'=>'rand'
 );

 $posts_blog = get_posts($args);
 foreach($posts_blog as $blogp){

 the_post_thumbnail( 'banner_pagina' );
 $post_imagem = get_the_post_thumbnail($blogp->ID, 'banner_pagina');
 echo $post_imagem;
 }

 ?>

Já os egundo loop vai exibir as imagens dos Custom Post Types registrados com o nome de clientes ordenados  pelo título  de forma ascendente. As imagens são exibidas em 4 colunas (4 div’s inline) onde a váriavel  contador controla onde será inserido a div com a quebra de linha das colunas.


<?php query_posts( array( 'post_type' => 'clientes',  'orderby' => 'title', 'order' => 'ASC', 'showposts' => 16) );?>

 <?php $contador_registros = 1; ?>

 <?php if(have_posts()) : ?><?php while(have_posts()) : the_post() ?>

<div><? the_post_thumbnail( 'clientes_capa' ); ?></div>

 <?php if ($contador_registros == 4) {

 //zera o contador
 $contador_registros = 0;

 //imprime quebra de div CLEAR
 ?>

 <div style="height:15px; clear: both;"></div>

 <?php } ?>
                < ?php $contador_registros = $contador_registros + 1; ?>
 <?php endwhile; else : ?>

Não esqueça de regsitrar a função post_thumbnail  no arquivo functions.php

// Add Post Thumbnail Theme Support
if ( function_exists( 'add_theme_support' ) ) {
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 217, 317, true );
add_image_size( 'banner_pagina', 934, 201, true );
add_image_size( 'clientes_capa', 87, 55, true );
} 

Categorias

Links

Tags

Autor do post bloginfo() Caminho do tema Campos Personalizados Categorias Codificação UTF8 Contac form 7 CSS Custom fields Custom Post Types data Dividir string explode() Formatação de datas Formatação de Hora get_ get_option() get_page_template() get_the_terms get_the_title() Hora IMG is_single() Janelas Links Lista de Categorias Lista de Posts Lista de ùltimos posts location.href Paginação Post_name Query_posts register_sidebar Sidebar the_author_nickname() the_category() the_tags() the_time() Titulo da página UFT8_encode UTF8 UTF8_decode Widgets wp_list_categories() âncoras

Copyright © 2017  |   W-Pedia – Wikipedia Wordpress BR  |  produzido por Henderson C. Torres