Cum să afișezi postări personalizate pe pagina principală în WordPress
Încerc să creez un portofoliu în WordPress folosind un Custom Post Type pentru a-mi afișa proiectele. Fiecare proiect doresc să-l afișez pe pagina mea principală statică cu o imagine reprezentativă ca miniatură, iar prin click pe o miniatură să mă ducă direct la proiectul respectiv.
Cum pot afișa Custom Post Types pe pagina principală statică? Doresc să afișez doar ultimele 6 postări, iar apoi să am un link către restul prin navigația mea.
Editare: Acest răspuns a fost scris înainte să realizez că OP are o pagină front statică. L-am lăsat aici în caz că este util pentru altcineva și am adăugat un al doilea răspuns pentru cazul paginii front statice.
Aceasta va adăuga tipul tău personalizat de postare în bucla principală a paginii de start:
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') );
}
}
Verificarea is_home
asigură că suntem pe pagina principală "home" a blogului, iar is_main_query
garantează că nu afectăm accidental alte bucle secundare.
Dacă dorești doar tipul tău personalizat de postare și nu postările obișnuite, atunci elimină post
din lista de tipuri de postări.
Există câteva articole incorecte pe internet care tratează această acțiune ca pe un filtru. Nu este, ci trece interogarea prin referință astfel încât să poți seta direct argumentele interogării.

Deci, dacă ai înregistrat un CPT (Custom Post Type) numit wpse_242473_custom_post_type
, poți folosi acest cod pentru a afișa 6 articole recente de acest tip pe pagina ta principală statică (sau oriunde altundeva). Poți folosi un shortcode sau un template tag, iar funcția ar trebui să funcționeze pentru ambele.
Este o modificare a unui cod pe care îl folosesc pe multe site-uri. Pune-l în fișierul functions.php
al temei tale. Desigur, modifică HTML-ul pe care l-am folosit pentru a se potrivi nevoilor tale.
Am adăugat o modificare pe care am vrut să o testez de ceva timp, așa că dacă întâmpini probleme, anunță-mă și o voi testa corespunzător. Ceea ce am adăugat este un set complet de argumente opționale care permit, sper, aceleiași funcții să funcționeze atât ca shortcode, cât și ca template tag. Poți fie să introduci [recentposts]
în editorul vizual pe orice pagină, fie să adaugi <?php wpse_242473_recent_posts(); ?>
în orice template al temei tale.
Pentru a-l adăuga în template-ul paginii tale principale statice, editează (sau creează) template-ul front-page.php
. Acesta va fi selectat automat pentru pagina ta principală statică, fără să fie nevoie să-l selectezi din ecranul de editare al paginii.
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>Proiecte Recente</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' );
Este o simplă preluare a postărilor pe care le dorești.
Bucla foreach
construiește HTML-ul tău, iar condiționalul de la sfârșit fie returnează HTML-ul, dacă ai folosit un shortcode, fie îl afișează dacă apelezi funcția ca un template tag.
Ceea ce multe articole de pe web nu-ți arată este acel al treilea argument transmis tuturor handler-elor de shortcode. Când folosești shortcode-ul, acesta conține numele shortcode-ului, așa că un handler ar putea, teoretic, gestiona mai multe shortcode-uri. În acest caz, îl folosim pentru a determina dacă funcția a fost apelată ca un handler de shortcode sau nu.

Puteți urma următorii pași:
1) Creați un șablon pentru CPT (tipul personalizat de postare)
2) Plasați următoarele coduri în acel șablon; înlocuiți CPT cu tipul vostru de postare.
3) Deschideți o pagină nouă și publicați-o selectând acest șablon din partea dreaptă.
4) În final, mergeți la setări, apoi faceți clic pe citire și selectați pagina de start sub O pagină statică.
Coduri:
<?php
/**
* Nume șablon: 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(); ?>
