Categoria para custom post type
-
Boa tarde pessoal,
eu consigo criar o custom post type e suas categorias, mas não consigo chamar na minha página.
Dos post normais e sua categorias chamo desta forma (abaixo), onde cat é o ID da categoria, e dentro coloco os campos que quero chamar:
<?php $recent = new WP_Query("cat=34&showposts=4"); while($recent->have_posts()) : $recent->the_post();?>Mas para o custom post type não funciona, ele não retorna valor algum quando coloco uma categoria criada por lá.
-
Pesquise por tax_query que você conseguirá montar o seu loop.
Neste link, além da explicação e parâmetros tem exemplos de aplicação.
https://codex.wordpress.org/Class_Reference/WP_QueryOii theandersonn obrigada por sua ajuda,
mas ainda estou confusa com isso;
Pode me ajudar em um exemplo:
Criei o tipo de post “filmes”,
e dentro dele a categoria “teste_filme” de ID 52.
Como eu chamo isso para aparecer na tela em loop?No link que eu te indiquei tem exemplos.
Veja esse: Simple Taxonomy Query:
$args = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'people', 'field' => 'slug', 'terms' => 'bob', ), ), ); $query = new WP_Query( $args );Em taxonomy você insere a taxonomia que você criou e em terms a categoria que vc quer puxar pro seu loop.
Sim, isso eu coloquei.
Fiz a substituição…
A minha dúvida é como gerar um loop disso.
Escrever na página título, resumo etc de cada postEu coloquei assim:
<?php $args = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'film', 'field' => 'slug', 'terms' => 'teste_cat', ), ), ); $query = new WP_Query( $args ); while($recent->have_posts()) : $recent->the_post(); ?> <h3 class="titulo"><?php the_title(); ?></h3> <p class="texto"><?php the_excerpt(); ?></p> <?php endwhile; ?>E ele retorna:
Partnerships
Partnerships page contentEm post_type precisa passar a taxomia criada, no seu caso film e abaixo passe tb o term.
$args = array( 'post_type' => 'film', 'term' => 'taxonomy-category-criada', .....Desculpe a amolação, mas ainda não entendi, desculpe….
Eu sou nova nessa parte de estruturação
Vou colocar o código de tudo aqui, acho que assim você entende o que eu criei, talvez tenha feito algo errado:Na function eu inseri:
add_action( 'init', 'create_post_type_film' ); function create_post_type_film() { $labels = array( 'name' => _x('Films', 'post type general name'), 'singular_name' => _x('Film', 'post type singular name'), 'add_new' => _x('Add New', 'film'), 'add_new_item' => __('Add New Film'), 'edit_item' => __('Edit Film'), 'new_item' => __('New Film'), 'all_items' => __('All Films'), 'view_item' => __('View Film'), 'search_items' => __('Search Films'), 'not_found' => __('No Films found'), 'not_found_in_trash' => __('No Films found in Trash'), 'parent_item_colon' => '', 'menu_name' => 'Films' ); register_post_type( 'film', array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'has_archive' => 'films', 'rewrite' => array( 'slug' => 'films', 'with_front' => false, ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array('title','editor','author','thumbnail','excerpt','comments') ) ); register_taxonomy( 'film_category', array( 'film' ), array( 'hierarchical' => true, 'label' => __( 'Film Category' ), 'labels' => array( // Labels customizadas 'name' => _x( 'Categories', 'taxonomy general name' ), 'singular_name' => _x( 'Category', 'taxonomy singular name' ), 'search_items' => __( 'Search Categories' ), 'all_items' => __( 'All Categories' ), 'parent_item' => __( 'Parent Category' ), 'parent_item_colon' => __( 'Parent Category:' ), 'edit_item' => __( 'Edit Category' ), 'update_item' => __( 'Update Category' ), 'add_new_item' => __( 'Add New Category' ), 'new_item_name' => __( 'New Category Name' ), 'menu_name' => __( 'Category' ), ), 'show_ui' => true, 'show_in_tag_cloud' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'films/categories', 'with_front' => false, ), ) ); register_taxonomy_for_object_type( 'tags', 'film' ); }E dentro do painel do WP eu criei (dentro do espaço de filmes) as categorias comédia, romance e ação
Neste caso então:
‘post_type’ – é Films
‘taxonomy’ – ?
‘term’ – é o slug da categoria criada? NO caso “comedia”Olhei e seu código e tem alguns erros como na register_taxonomy.
Embora vc consiga visualizar o CPT no dashboard ele não está gerando corretamente as urls de categorias por exemplo.Sugiro que vc leia no Codex sobre Custom Post Type e Hierarquia de Templates.
É importante utilizarmos os templates corretos para não embolarmos o meio de campo. Utilizando o archives.php podemos listar os posts do CPT com loop padrão.O loop é igual, moço! O que vai mudar é o parametro. Pras “categorias” de um Custom Post Type, você deve usar taxonomy!
Dá uma olhada no link do Codex: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
Mirriam eu não entendi o que seria o ‘terms’ => ‘bob’
Aline, no exemplo do Codex, imagine a categoria “pessoas” (people)
Esta categoria “pessoas” possui termos (terms), certo? Um desses termos ali, é “bob”Num exemplo pratico, seria mais ou menos assim:
Custom Post Type: Filmes
Taxonomy: GeneroDentro da taxonomia Genero, eu tenho: Ação, Comédia, Romance, Ficção, Terror, etc…. que são os termos da minha taxonomia.
Entendeu?
Mirriam, acredito que entendi sim…
Estava fazendo confusão porque
a taxonomy no meu caso é “categoria” a palavra.
Acho que foi isso.Mas agora como eu retorno o valor da tela?
Coloquei assim o código:<?php $args = array( 'post_type' => 'film', 'tax_query' => array( array( 'taxonomy' => 'film_category', 'field' => 'slug', 'terms' => 'comedia', ), ), ); $query = new WP_Query( $args ); ?>O loop é padrão. No caso do uso da classe WP_Query() fica assim:
https://codex.wordpress.org/Class_Reference/WP_QueryFuncionou =D
Muito obrigada, deu certo.Só mais uma duvida…
Para os post normal eu coloco assim para filtrar a linguagem:
<?php $recent = new WP_Query("cat=33&showposts=4&lang=pt"); while($recent->have_posts()) : $recent->the_post();?>...Como eu acrescento este parametro lang=pt neste loop?
$the_query = new WP_Query( $args );
O tópico ‘Categoria para custom post type’ está fechado para novas respostas.