Cum să obții postări după tip personalizat și să afișezi câmpuri personalizate?
Am tipuri de postări personalizate pentru Rețete și am configurat Advanced Custom Fields (din plugin).
În cadrul acestui tip de postare personalizat, am mai multe categorii. Două întrebări:
1.) Cum pot obține toate postările dintr-o categorie personalizată? Înțeleg cum să afișez câmpurile personalizate, dar nu sunt sigur cum să apelez toate postările dintr-o categorie personalizată, apoi să afișez titlul, imaginea și link-ul acestora.
2.) Într-un scenariu cu tip de postare personalizat, este mai bine să configurez și categorii personalizate sau să folosesc categoriile generice de postări?
Am încercat get_posts, apoi am încercat să obțin postări după categorie personalizată. De exemplu:
<?php
$args = array(
'posts_per_page' => 8,
'orderby' => 'rand',
'post_type' => 'recipes',
'type' => 'side-dishes',
'post_status' => 'publish'
);
$show_albums = get_posts( $args );
?>
Nu știu implementarea exactă, deoarece post_type este o postare personalizată, și presupun că ar trebui să folosesc un foreach probabil pentru a utiliza the_field (din ACF)
=========================================================== Ok, după ce am luat sugestia de mai jos, iată ce am, vă rog să-mi spuneți dacă fac acest lucru corect?
Iată interogarea - care pare să funcționeze:
<?php
// Interogarea
$the_query = new WP_Query($args = array(
'post_type' => 'recipes',
'custom_cat' => 'side-dishes'
) );
// Bucla
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// nu s-au găsit postări
}
/* Restaurează datele postării originale */
wp_reset_postdata();?>
Am înregistrat taxonomia, dar ceea ce mă confuzează este că, tipul meu de postare înregistrat este recipes, nu ar trebui ca register_taxonomy să fie "recipes" și nu 'custom_cat?'
register_taxonomy( 'custom_cat',
array('recipes'), /* dacă schimbi numele din register_post_type( 'custom_type', atunci trebuie să schimbi și aici */
array('hierarchical' => true, /* dacă este true, se comportă ca categoriile */
'labels' => array(
'name' => __( 'Categorii Rețete', 'bonestheme' ), /* numele taxonomiei personalizate */
'singular_name' => __( 'Categorie Rețetă', 'bonestheme' ), /* numele singular al taxonomiei */
'search_items' => __( 'Caută Categorii Rețete', 'bonestheme' ), /* titlul de căutare pentru taxonomie */
'all_items' => __( 'Toate Categoriile de Rețete', 'bonestheme' ), /* titlul pentru toate taxonomiile */
'parent_item' => __( 'Categorie Părinte Rețetă', 'bonestheme' ), /* titlul părinte pentru taxonomie */
'parent_item_colon' => __( 'Categorie Personalizată Părinte:', 'bonestheme' ), /* titlul taxonomiei părinte */
'edit_item' => __( 'Editează Categoria Personalizată', 'bonestheme' ), /* titlul de editare taxonomie personalizată */
'update_item' => __( 'Actualizează Categoria Personalizată', 'bonestheme' ), /* titlul de actualizare pentru taxonomie */
'add_new_item' => __( 'Adaugă Categorie Personalizată Nouă', 'bonestheme' ), /* titlul de adăugare nou pentru taxonomie */
'new_item_name' => __( 'Nume Nou Categorie Personalizată', 'bonestheme' ) /* titlul numelui pentru taxonomie */
),
'show_admin_column' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'custom-slug' ),
)
);
Iată tipul de postare înregistrat:
function create_recipe() {
// crearea (înregistrarea) tipului personalizat
register_post_type( 'recipes', /* (http://codex.wordpress.org/Function_Reference/register_post_type) */
// să adăugăm acum toate opțiunile pentru acest tip de postare
array( 'labels' => array(
'name' => __( 'Rețete', 'bonestheme' ), /* Acesta este Titlul Grupului */
'singular_name' => __( 'Rețetă', 'bonestheme' ), /* Acesta este tipul individual */
'all_items' => __( 'Toate Rețetele', 'bonestheme' ), /* elementul din meniu pentru toate elementele */
'add_new' => __( 'Adaugă Rețetă Nouă', 'bonestheme' ), /* Elementul de meniu pentru adăugare nou */
'add_new_item' => __( 'Adaugă Rețetă', 'bonestheme' ), /* Titlul de Afișare pentru Adăugare Nou */
'edit' => __( 'Editează', 'bonestheme' ), /* Dialog Editare */
'edit_item' => __( 'Editează Rețetă', 'bonestheme' ), /* Titlu Afișare Editare */
'new_item' => __( 'Tip Nou de Rețetă', 'bonestheme' ), /* Titlu Afișare Nou */
'view_item' => __( 'Vezi Rețetă', 'bonestheme' ), /* Titlu Afișare Vizualizare */
'search_items' => __( 'Caută Rețete', 'bonestheme' ), /* Titlu Căutare Tip Personalizat */
'not_found' => __( 'Nimic găsit în Baza de Date.', 'bonestheme' ), /* Aceasta se afișează dacă nu există încă înregistrări */
'not_found_in_trash' => __( 'Nimic găsit în Coș', 'bonestheme' ), /* Aceasta se afișează dacă nu este nimic în coș */
'parent_item_colon' => ''
), /* sfârșitul array-urilor */
'description' => __( "Secțiunea de Rețete pentru It's Just food", 'bonestheme' ), /* Descriere Tip Personalizat */
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'query_var' => true,
'menu_position' => 4, /* aceasta este ordinea în care doriți să apară în meniul din stânga */
'menu_icon' => get_stylesheet_directory_uri() . '/library/images/custom-post-icon.png', /* iconița pentru meniul tipului de postare personalizat */
'rewrite' => array( 'slug' => 'recipes', 'with_front' => false ), /* puteți specifica slug-ul url */
'has_archive' => 'recipes', /* puteți redenumi slug-ul aici */
'capability_type' => 'post',
'hierarchical' => false,
/* următorul este important, spune ce este activat în editorul de postări */
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')
) /* sfârșitul opțiunilor */
); /* sfârșitul înregistrării tipului de postare */
Acesta ar putea fi un articol util pentru tine. Nu sunt sigur exact ce încerci să realizezi, așa că voi prezenta informația într-un format simplu.
Această interogare va extrage toate articolele din Post Type-ul recipes
unde există câmpul personalizat side-dishes
. Apoi poți să le parcurgi și să le afișezi în modul dorit.
$recipes = new WP_Query(
array(
'post_type' => 'recipes',
'posts_per_page' => 8,
'orderby' => 'rand',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'side-dishes'
'compare' => 'EXISTS'
)
)
)
);
A doua interogare va extrage toate articolele din taxonomia my_taxonomy_name_here
pe care va trebui să o înlocuiești cu taxonomia ta. Caută categorii cu slug-ul my_category_slug_here
, pe care va trebui să îl înlocuiești cu slug-ul categoriei tale. Poți înlocui 'slug' cu ID și să extragi în funcție de acesta dacă preferi.
$recipes = new WP_Query(
array(
'post_type' => 'recipes',
'posts_per_page' => 8,
'orderby' => 'rand',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'my_taxonomy_name_here',
'field' => 'slug',
'terms' => 'my_category_slug_here'
)
)
)
);
Poți apoi să parcurgi fiecare articol ca într-un loop normal:
<?php if($recipes->have_posts()) : ?>
<?php while($recipes->have_posts()) : $recipes->the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
<?php endwhile; ?>
<?php endif; wp_reset_query(); ?>

în șablonul pentru această pagină deja afișez postări folosind <?php if (have_posts()) : while (have_posts()) : the_post(); ?> , ar fi inutil WP_Query în acest caz?

WP_Query este metoda standard de a afișa mai multe tipuri de postări pe aceeași pagină. Loop-ul pe care l-ai postat este loop-ul principal pentru acel tip specific de postare. Poți modifica loop-ul principal folosind filtrul pre_get_posts dacă dorești.

ok deci este acceptabil să am două WP_Query pe aceeași pagină atâta timp cât nu interferează una cu alta?

aici este ceea ce lucrez acum: <?php
// Interogarea $the_query = new WP_Query($args = array( 'post_type' => 'recipes', 'recipe' => 'side-dishes' ) );
// Bucla if ( $the_query->have_posts() ) { echo '
- ';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '
- ' . get_the_title() . ' '; } echo '

Nu este nevoie să transmiți $args = array()
în WP_Query
, poți fie să plasezi $args în afara WP_Query sau să introduci array-ul direct în interiorul WP_Query. Deci presupun că taxonomia ta se numește recipe
, corect?

se numește custom_cat dar probabil ar trebui să se numească recipe. Am modificat întrebarea de mai sus pentru a include soluția actuală.

aici este interogarea - care pare să funcționeze:
-> Deci sunt probleme sau a funcționat :D ?
