Come ottenere articoli per tipo di post personalizzato e mostrare i campi personalizzati?

25 feb 2014, 22:05:02
Visualizzazioni: 23.8K
Voti: 6

Ho dei tipi di post personalizzati per le Ricette e ho configurato Advanced Custom Fields (dal plugin).

All'interno di quel tipo di post personalizzato, ho diverse categorie. Due domande:

1.) Come ottengo tutti i post da una categoria personalizzata? So come visualizzare i campi personalizzati, ma non sono sicuro di come richiamare tutti i post da una categoria personalizzata, per poi mostrarne il titolo, l'immagine e il link.

2.) In uno scenario con tipo di post personalizzato, è meglio impostare anche categorie personalizzate o utilizzare le categorie generiche dei post?

Ho provato get_posts, poi ho provato ottenendo i post per categoria personalizzata. Per esempio:

<?php
$args = array(
     'posts_per_page' => 8,
     'orderby' => 'rand',
     'post_type' => 'recipes',
     'type' => 'side-dishes',
     'post_status' => 'publish'
);
$show_albums = get_posts( $args );
?>

Non conosco l'implementazione esatta, dato che post_type è un post personalizzato, e immagino che dovrei utilizzare un foreach probabilmente per usare the_field (da ACF)

=========================================================== Ok dopo aver preso il suggerimento qui sotto ecco cosa ho, per favore fatemi sapere se lo sto facendo correttamente?

ecco la query - che sembra funzionare:

<?php
// La Query
$the_query = new WP_Query($args = array(
    'post_type' => 'recipes',
    'custom_cat' => 'side-dishes'
) );

// Il Loop
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 {
    // nessun post trovato
}
/* Ripristina i Dati Post Originali */
wp_reset_postdata();?>

Ho registrato la tassonomia, ma quello che mi confonde è che, il mio post-type registrato è recipes, non dovrebbe register_taxonomy essere "recipes" e non 'custom_cat'?

register_taxonomy( 'custom_cat', 
        array('recipes'), /* se cambi il nome di register_post_type( 'custom_type', devi cambiare anche questo */
        array('hierarchical' => true,     /* se questo è true, si comporta come le categorie */
            'labels' => array(
                'name' => __( 'Categorie Ricette', 'bonestheme' ), /* nome della tassonomia personalizzata */
                'singular_name' => __( 'Categoria Ricetta', 'bonestheme' ), /* nome singolare tassonomia */
                'search_items' =>  __( 'Cerca Categorie Ricette', 'bonestheme' ), /* titolo ricerca per tassonomia */
                'all_items' => __( 'Tutte le Categorie Ricette', 'bonestheme' ), /* titolo per tutte le tassonomie */
                'parent_item' => __( 'Categoria Ricetta Genitore', 'bonestheme' ), /* titolo genitore per tassonomia */
                'parent_item_colon' => __( 'Categoria Personalizzata Genitore:', 'bonestheme' ), /* titolo tassonomia genitore */
                'edit_item' => __( 'Modifica Categoria Personalizzata', 'bonestheme' ), /* titolo modifica tassonomia personalizzata */
                'update_item' => __( 'Aggiorna Categoria Personalizzata', 'bonestheme' ), /* titolo aggiornamento tassonomia */
                'add_new_item' => __( 'Aggiungi Nuova Categoria Personalizzata', 'bonestheme' ), /* titolo aggiungi nuovo per tassonomia */
                'new_item_name' => __( 'Nuovo Nome Categoria Personalizzata', 'bonestheme' ) /* titolo nome per tassonomia */
            ),
            'show_admin_column' => true, 
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array( 'slug' => 'custom-slug' ),
        )
    );

ecco il tipo di post registrato:

function create_recipe() { 
    // creazione (registrazione) del tipo personalizzato 
    register_post_type( 'recipes', /* (http://codex.wordpress.org/Function_Reference/register_post_type) */
        // aggiungiamo ora tutte le opzioni per questo tipo di post
        array( 'labels' => array(
            'name' => __( 'Ricette', 'bonestheme' ), /* Questo è il Titolo del Gruppo */
            'singular_name' => __( 'Ricetta', 'bonestheme' ), /* Questo è il tipo individuale */
            'all_items' => __( 'Tutte le Ricette', 'bonestheme' ), /* la voce del menu tutti gli elementi */
            'add_new' => __( 'Aggiungi Nuova Ricetta', 'bonestheme' ), /* La voce del menu aggiungi nuovo */
            'add_new_item' => __( 'Aggiungi Ricetta', 'bonestheme' ), /* Titolo Visualizzazione Aggiungi Nuovo */
            'edit' => __( 'Modifica', 'bonestheme' ), /* Dialogo Modifica */
            'edit_item' => __( 'Modifica Ricetta', 'bonestheme' ), /* Titolo Visualizzazione Modifica */
            'new_item' => __( 'Nuovo Tipo Ricetta', 'bonestheme' ), /* Titolo Visualizzazione Nuovo */
            'view_item' => __( 'Visualizza Ricetta', 'bonestheme' ), /* Titolo Visualizzazione Vista */
            'search_items' => __( 'Cerca Ricette', 'bonestheme' ), /* Titolo Ricerca Tipo Personalizzato */ 
            'not_found' =>  __( 'Nessun risultato nel Database.', 'bonestheme' ), /* Questo viene visualizzato se non ci sono ancora voci */ 
            'not_found_in_trash' => __( 'Nessun risultato nel Cestino', 'bonestheme' ), /* Questo viene visualizzato se non c'è nulla nel cestino */
            'parent_item_colon' => ''
            ), /* fine degli array */
            'description' => __( "Sezione Ricette per It's Just food", 'bonestheme' ), /* Descrizione Tipo Personalizzato */
            'public' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'show_ui' => true,
            'query_var' => true,
            'menu_position' => 4, /* questo è l'ordine in cui vuoi che appaia nel menu laterale sinistro */ 
            'menu_icon' => get_stylesheet_directory_uri() . '/library/images/custom-post-icon.png', /* l'icona per il menu del tipo di post personalizzato */
            'rewrite'   => array( 'slug' => 'recipes', 'with_front' => false ), /* puoi specificare lo slug dell'url */
            'has_archive' => 'recipes', /* puoi rinominare lo slug qui */
            'capability_type' => 'post',
            'hierarchical' => false,
            /* il prossimo è importante, indica cosa è abilitato nell'editor dei post */
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')
        ) /* fine delle opzioni */
    ); /* fine della registrazione del tipo di post */
2
Commenti

Cosa hai provato? Hai fatto qualche ricerca? Hai considerato l'uso di WP_Query?

Howdy_McGee Howdy_McGee
25 feb 2014 22:24:53

sì, hai ragione, modificherò la mia domanda per aggiungere ciò che ho provato.

user31344 user31344
25 feb 2014 22:28:52
Tutte le risposte alla domanda 1
8

Questo potrebbe essere una buona lettura per te. Non sono esattamente sicuro di cosa tu stia cercando di fare, quindi lo spiegherò in un formato semplice.

Questa query estrarrà tutti gli articoli del Post Type recipes dove esiste il campo personalizzato side-dishes. Puoi poi ciclarli e visualizzarli come preferisci.

$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'
            )
        )
    )
);

Questa seconda query estrarrà tutti gli articoli sotto la tassonomia my_taxonomy_name_here che dovrai sostituire con la tua tassonomia. Cerca categorie con lo slug my_category_slug_here che dovrai sostituire con lo slug della categoria. Puoi sostituire 'slug' con ID e estrarli in base a quello se preferisci.

$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'
            )
        )
    )
);

Puoi poi ciclare attraverso ogni articolo come un normale loop:

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

Documentazione su WP_Query

Documentazione su Meta_Query

Documentazione su Tax_Query

25 feb 2014 23:01:22
Commenti

nel template di questa pagina sto già richiamando i post usando <?php if (have_posts()) : while (have_posts()) : the_post(); ?> , sarebbe superfluo usare wp_query?

user31344 user31344
26 feb 2014 00:14:49

WP_Query è il metodo standard per mostrare diversi tipi di post sulla stessa pagina. Il Loop che hai postato è il loop principale per quel specifico tipo di post. Puoi modificare il loop principale usando il filtro pre_get_posts se lo desideri.

Howdy_McGee Howdy_McGee
26 feb 2014 00:23:18

ok quindi va bene avere due wp_query sulla stessa pagina finché non interferiscono tra loro?

user31344 user31344
26 feb 2014 00:56:49

ecco con cosa sto lavorando ora: <?php

// La Query $the_query = new WP_Query($args = array( 'post_type' => 'recipes', 'recipe' => 'side-dishes' ) );

// Il Loop 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 { // nessun post trovato } /* Ripristina i dati originali del Post */ wp_reset_postdata();?>

user31344 user31344
26 feb 2014 00:59:05

Non è necessario passare $args = array() in WP_Query, puoi mettere $args fuori da WP_Query oppure inserire l'array direttamente dentro WP_Query. Quindi presumo che la tua tassonomia si chiami recipe, corretto?

Howdy_McGee Howdy_McGee
26 feb 2014 16:37:14

si chiama custom_cat ma probabilmente dovrebbe chiamarsi recipe. Ho modificato la domanda precedente per includere la soluzione attuale.

user31344 user31344
26 feb 2014 18:15:15

ecco la query - che sembra funzionare: -> Quindi ci sono problemi o ha funzionato :D ?

Howdy_McGee Howdy_McGee
26 feb 2014 18:20:56

sì, ha funzionato, volevo solo verificare se ci fossero problemi con la soluzione. Potrebbe funzionare, ma in futuro.. comunque apprezzo molto il tuo tempo!

user31344 user31344
26 feb 2014 18:43:07
Mostra i restanti 3 commenti