Come visualizzare Custom Post Types nella pagina principale
Sto cercando di creare un portfolio con WordPress utilizzando un Custom Post Type per visualizzare i miei progetti. Voglio che ogni progetto appaia nella mia pagina statica principale con un'immagine in evidenza come miniatura, e cliccando sulla miniatura si vada direttamente al progetto.
Come posso mostrare i Custom Post Types nella pagina statica principale? Vorrei visualizzare solo gli ultimi 6 post, e poi avere un link verso gli altri tramite la navigazione.
Modifica: Questa risposta è stata scritta prima che mi rendessi conto che l'OP ha una pagina frontale statica. L'ho lasciata qui nel caso possa essere utile a qualcun altro e ho aggiunto una seconda risposta per il caso di pagina frontale statica.
Questo codice aggiungerà il tuo custom post type al loop principale della home page:
add_action( 'pre_get_posts', 'wpse_242473_add_post_type_to_home' );
function wpse_242473_add_post_type_to_home( $query ) {
if( $query->is_main_query() && $query->is_home() ) {
$query->set( 'post_type', array( 'post', 'your_custom_post_type_here') );
}
}
Il controllo is_home
verifica che siamo nella pagina "home" principale del blog e is_main_query
assicura che non influenziamo accidentalmente altri loop secondari.
Se vuoi mostrare solo il tuo custom post type e non i normali articoli, rimuovi post
dall'array dei post type.
Ci sono alcuni articoli non corretti sul web che trattano questa azione come un filtro. Non lo è, passa la query per riferimento in modo da poter impostare direttamente gli argomenti della query.

Quindi, se hai registrato un CPT chiamato wpse_242473_custom_post_type
puoi usare questo codice per mostrare 6 post recenti di quel tipo nella tua pagina frontale statica (o ovunque). Puoi usare uno shortcode o un template tag e la funzione dovrebbe funzionare per entrambi.
È una modifica di un codice che uso in molti siti. Inseriscilo nel functions.php
del tuo tema. Modifica l'HTML che ho usato come preferisci, ovviamente.
Ho aggiunto una variante che volevo provare da tempo, quindi se dovesse darti problemi fammelo sapere e lo testerò correttamente. Quello che ho aggiunto è un set completo di argomenti opzionali che permettono alla stessa funzione di funzionare, spero, sia come shortcode che come template tag. Puoi inserire [recentposts]
nell'editor visivo di qualsiasi pagina, oppure puoi inserire <?php wpse_242473_recent_posts(); ?>
in qualsiasi template del tuo tema.
Per inserirlo nel template della tua pagina frontale statica, modifica (o crea) il template front-page.php
. Questo verrà selezionato automaticamente per la tua pagina frontale statica, senza doverlo selezionare manualmente nella schermata di modifica della pagina.
function wpse_242473_recent_posts( $atts = null, $content = null, $tag = null ) {
$out = '';
$args = array(
'numberposts' => '6',
'post_status' => 'publish',
'post_type' => 'wpse_242473_custom_post_type' ,
);
$recent = wp_get_recent_posts( $args );
if ( $recent ) {
$out .= '<section class="overview">';
$out .= '<h1>Progetti Recenti</h1>';
$out .= '<div class="overview">';
foreach ( $recent as $item ) {
$out .= '<a href="' . get_permalink( $item['ID'] ) . '">';
$out .= get_the_post_thumbnail( $item['ID'] );
$out .= '</a>';
}
$out .= '</div></section>';
}
if ( $tag ) {
return $out;
} else {
echo $out;
}
}
add_shortcode( 'recentposts', 'wpse_242473_recent_posts' );
È un recupero semplice dei post che vuoi.
Il ciclo foreach
costruisce il tuo HTML e poi il condizionale alla fine restituisce l'HTML, se hai usato uno shortcode, oppure lo stampa se stai chiamando la funzione come template tag.
Quello che molti articoli sul web non ti mostrano è il terzo argomento passato a tutti i gestori di shortcode. Quando usi lo shortcode contiene il nome dello shortcode, quindi un gestore potrebbe in teoria gestire più shortcode. In questo caso lo stiamo usando per capire se la funzione è stata chiamata come gestore di shortcode o meno.

Puoi seguire questi passaggi:
1) Crea un template per il tuo CPT (Custom Post Type)
2) Inserisci i seguenti codici in quel template; sostituisci CPT con il nome del tuo CPT.
3) Apri una nuova pagina e pubblica una nuova pagina selezionando questo template dal lato destro.
4) Infine, vai in Impostazioni, clicca su Lettura e seleziona la pagina iniziale sotto "Una pagina statica".
Codici:
<?php
/**
* Template Name: CPT
* @package CPT
* @since CPT 1.0
*/
get_header();
global $paged;
if( get_query_var( 'paged' ) ) {
$paged = get_query_var( 'paged' );
} elseif( get_query_var( 'page' ) ) {
$paged = get_query_var( 'page' );
} else {
$paged = 1;
}
$args = array(
'post_type' => 'CPT',
'posts_per_page'=>6,
'paged' => $paged,
);
$query = new WP_Query($args);
?>
<?php if ( $blog_query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="post-thumbnail">
<?php if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) {?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
<?php the_post_thumbnail(); ?>
</a>
<?php }
?>
</div>
<?php endwhile; ?>
<?php endif; ?>
<?php get_footer(); ?>
