Cum să obții postări după tip personalizat și să afișezi câmpuri personalizate?

25 feb. 2014, 22:05:02
Vizualizări: 23.8K
Voturi: 6

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 */
2
Comentarii

Ce ai încercat? Ai făcut vreo cercetare? Te-ai uitat la utilizarea WP_Query?

Howdy_McGee Howdy_McGee
25 feb. 2014 22:24:53

da, ai dreptate, voi amend întrebarea mea pentru a adăuga ce am încercat.

user31344 user31344
25 feb. 2014 22:28:52
Toate răspunsurile la întrebare 1
8

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(); ?>

Documentație despre WP_Query

Documentație despre Meta_Query

Documentație despre Tax_Query

25 feb. 2014 23:01:22
Comentarii

î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?

user31344 user31344
26 feb. 2014 00:14:49

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.

Howdy_McGee Howdy_McGee
26 feb. 2014 00:23:18

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

user31344 user31344
26 feb. 2014 00:56:49

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 '
'; } else { // nu s-au găsit postări } /* Restaurare Date Postare Originală */ wp_reset_postdata();?>

user31344 user31344
26 feb. 2014 00:59:05

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?

Howdy_McGee Howdy_McGee
26 feb. 2014 16:37:14

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ă.

user31344 user31344
26 feb. 2014 18:15:15

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

Howdy_McGee Howdy_McGee
26 feb. 2014 18:20:56

da, a funcționat, voiam doar să verific dacă există probleme cu soluția. S-ar putea să funcționeze, dar pe viitor.. în orice caz, apreciez foarte mult timpul acordat!

user31344 user31344
26 feb. 2014 18:43:07
Arată celelalte 3 comentarii