Tipuri de Postări Personalizate în Paginile de Categorii
Lucrez cu un tip de postare personalizată care folosește categoriile normale WordPress.
Pot să modific șablonul categoriei pentru a afișa tipurile mele de postări personalizate exact cum doresc.
Problema este că, odată ce fac acest lucru, postările normale de blog sunt și ele afectate.
Desigur, pot limita fie postările normale de blog, fie tipul de postare personalizată la o singură categorie și să creez un category-ID.php pentru a lucra doar cu acea categorie.
Dar mă întreb dacă există o soluție mai flexibilă?
Este posibil să creez șabloane de categorii specifice pentru tipuri de postări, adică unul pentru a afișa postări normale, unul pentru a afișa tipuri de postări personalizate etc?
Este posibil acest lucru? Dacă nu, care este cea mai bună modalitate de a rezolva această situație?

Pentru tipuri personalizate de articole (custom post types) cu taxonomii personalizate, poți crea un șablon dedicat pentru acea taxonomie. Șablonul pentru taxonomia personalizată ar trebui să se numească taxonomy-{taxonomie}.php
. De exemplu, dacă taxonomia ta se numește "categorii-gatit", fișierul tău ar trebui să se numească taxonomy-categorii-gatit.php
.
Mai multe informații despre fișierele șablon pentru arhivele de taxonomii speciale găsești în codex aici: http://codex.wordpress.org/Template_Hierarchy#Custom_Taxonomies_display

Puteți face acest lucru în funcție de tipul postării, astfel:
dacă aveți category.php
pentru postările obișnuite și your-custom-type-category.php
pentru postările personalizate, adăugați acest cod în partea de sus a fișierului category.php.
<?php if (have_posts()){
the_post();
if( 'your_custom_type' == get_post_type( $post ) ) {
rewind_posts();
get_template_part('your-custom-type-category');
exit();
}
rewind_posts();
}
?>
Acum, ori de câte ori se solicită o categorie, codul va verifica dacă este vorba despre un tip de postare personalizat. În caz afirmativ, va folosi șablonul your-custom-type-category.php
, iar postările obișnuite vor fi afișate folosind category.php
fără nicio modificare.
Sper că vă ajută

Salut @Kelvin Jayanoris:
Există vreun motiv pentru care nu poți testa pur și simplu valoarea $post->post_type
cu o instrucțiune if..elseif
în interiorul Loop-ului tău, astfel:
<?php if ($post->post_type=='foo'): ?>
Pune aici HTML pentru tipul de post 'foo'...
<?php else if ($post->post_type=='bar'): ?>
Pune aici HTML pentru tipul de post 'bar'...
<?php else if ($post->post_type=='post'): ?>
Pune aici HTML pentru tipul de post 'post'...
<?php endif; ?>
Sau există vreun motiv pentru care nu poți crea propria ierarhie de fișiere șablon sub formă de nume de fișiere precum post-foo.php
, post-foo.php
, post-post.php
, de asemenea în interiorul Loop-ului tău?
Această linie de cod ar putea face asta pentru tine:
<?php include("post-{$post->post_type}.php"); ?>

Un răspuns mai simplu, dacă nu dorești să creezi fișiere noi sau să te complici cu modificări ale interogărilor, este să folosești acest cod în functions.php:
function sql_where_clause($sql) {
if (is_category()) {
$sql = str_replace("cms_posts.post_type = 'post'", "cms_posts.post_type='post' OR cms_posts.post_type = 'news' OR cms_posts.post_type='event'", $sql);
}
return $sql;
}
add_filter('posts_where', 'sql_where_clause');
Desigur, va trebui să modifici codul pentru a include tipurile tale personalizate de postări. Am făcut acest lucru pentru ca category.php să afișeze toate tipurile personalizate de postări pe care le-am dorit, ca și cum ar fi normale. Economisește mult timp și probleme.
Editare: Atenție la versiunea de WordPress pe care o folosești. Se pare că versiunile mai vechi de WordPress foloseau wp_posts în loc de cms_posts, așa că verifică ce nume de tabele trebuie să folosești, altfel vei obține rezultate ciudate (adică nu va afișa nimic)
