Creează o pagină 'single' pentru un Custom Post Type
Ok, am instalat plugin-ul Custom Post Type UI și am creat unul. Apoi am adăugat o postare nouă. În tema mea, am un fragment de cod care arată așa:
<?php
$loop = new WP_Query( array(
'post_type' => 'case studies', /* editează această linie */
'posts_per_page' => 15 ) );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
<?php the_post_thumbnail('thumbnail'); ?>
</a>
<?php endwhile; ?>
Acum, în primul rând, dacă dau click pe miniatură, primesc o eroare în browser care spune că este într-o buclă de redirecționare, dar în al doilea rând aș vrea să știu exact ce fișiere trebuie să creez pentru a vizualiza o postare individuală a acestui custom post type. Și ce să pun în acel fișier.

Folosește single-{posttype}.php
pentru șablonul de postare individuală. De asemenea, dacă îți înregistrezi tipul de postare cu argumentul has_archive
setat la true
, atunci poți folosi archive-{posttype}.php
pentru șablonul tău de arhivă, ceea ce îți va permite să sări peste acea interogare pe care o ai acolo, deoarece obiectul global $wp_query
va fi deja populat cu tipul tău personalizat de postare.
Apropo, ai un spațiu în argumentul tău post_type
, ceea ce va fi o problemă.
Consultă Ierarhia Șabloanelor și ia în considerare înregistrarea CPT-urilor folosind cod într-un plugin în loc să folosești un plugin de interfață CPT.

Nu este nevoie, deoarece WordPress va folosi șablonul implicit de pagină, însă poți crea un fișier personalizat single-cpt.php unde cpt reprezintă numele tipului de post înregistrat.
<?php
get_header(); ?>
<div id="main-content" class="main-content">
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
// Start the Loop.
while ( have_posts() ) : the_post();
// Include the page content template.
get_template_part( 'content', 'page' );
endwhile;
?>
</div><!-- #content -->
</div><!-- #primary -->
</div><!-- #main-content -->
<?php
get_sidebar();
get_footer();

Poți să scrii acest cod direct în fișierul tău single.php (în interiorul loop-ului) și să afișezi orice câmpuri ai nevoie în interiorul declarației if.
if($post_type == 'case_studies') { // poate fi necesar să fie fără spații (numele mașină)
echo '<h1>'.get_the_title().' arome</h1>';
// ID-ul postului
$post_id = get_the_ID();
get_post_meta($post_id, 'nume_camp_personalizat', true);
<a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a>
<?php endwhile; ?>
}
O altă opțiune este să creezi un șablon de pagină. Copiază fișierul single.php și redenumește-l case_studies.php .. la început, în interiorul tag-urilor php adaugă:
<?php
/*
Template Name: Brand Output 04/12
*/
?>
și apoi adaugă aceeași declarație if în interiorul loop-ului din single.php ca în exemplul de mai sus...

Aceasta funcționează, dar este o practică foarte proastă, cel mai apropiat lucru de care ar trebui să te apropii este get_template_part('stuff',$post->post_type);

Pentru că este cod murdar, ai o mulțime de instrucțiuni if else și cod duplicat. Ar fi mai bine să creezi un fișier de șablon precum 'content.php' și să folosești get_template_part('content',$post_type);
și să utilizezi content-case_studies.php
pentru a-l suprascrie pe o bază pe tipul de postare

În acest fel, fișierul tău single.php rămâne ușor de citit. Chiar și așa, ar fi mai bine să o faci corect și să folosești single-case_studies.php

Tipul de Post Personalizat în WordPress. Patru pași de bază. Pasul 1: Calea fișierului: theme/function.php în tema ta. Lipește codul în function.php (înregistrează tipul de post personalizat)
<?php
add_action( 'init', 'custom_post_type_func' );
function custom_post_type_func() {
//posttypename = services
$labels = array(
'name' => _x( 'Servicii', 'services' ),
'singular_name' => _x( 'serviciu', 'services' ),
'add_new' => _x( 'Adaugă nou', 'services' ),
'add_new_item' => _x( 'Adaugă serviciu nou', 'services' ),
'edit_item' => _x( 'Editează serviciu', 'services' ),
'new_item' => _x( 'Serviciu nou', 'services' ),
'view_item' => _x( 'Vezi serviciu', 'services' ),
'search_items' => _x( 'Caută servicii', 'services' ),
'not_found' => _x( 'Niciun serviciu găsit', 'services' ),
'not_found_in_trash' => _x( 'Niciun serviciu găsit în Coșul de gunoi', 'services' ),
'parent_item_colon' => _x( 'Serviciu părinte:', 'services' ),
'menu_name' => _x( 'Servicii', 'services' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'description' => 'Salut, acesta este tipul meu de post personalizat.',
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ),
'taxonomies' => array( 'category', 'post_tag', 'page-category' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'services', $args );
}
?>
Pasul 2: cum poți afișa tipul de post personalizat în WordPress pe o pagină de șablon?
Poți afișa oriunde în pagina de șablon astfel:
<?php $args = array( 'post_type' => 'services', 'posts_per_page' => 20 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="services-items">
<?php the_title();
if ( has_post_thumbnail( $post->ID ) ) {
echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
echo get_the_post_thumbnail( $post->ID, 'thumbnail' );
echo '</a>'; }
?>
</div>
<?php endwhile; ?>
Pasul 3: Creează un șablon nou pentru afișarea unui singur post astfel
single-{numele tipului de post personalizat}.php sau single-services.php
Pasul 4: Lipește codul în fișierul single-services.php
<?php /* Bucla */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="main-post-div">
<div class="single-page-post-heading">
<h1><?php the_title(); ?></h1>
</div>
<div class="content-here">
<?php the_content(); ?>
</div>
<div class="comment-section-here"
<?php //comments_template(); ?>
</div>
</div>
<?php endwhile; ?>
Acesta este un exemplu de tip de post personalizat cu pagină de post individual.
