Tipuri de Postări Personalizate în Paginile de Categorii

22 feb. 2011, 19:47:27
Vizualizări: 43.2K
Voturi: 6

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?

1
Comentarii

Am găsit o soluție Șablonul tău personalizat de taxonomie ar trebui să se numească taxonomy-{taxonomy}.php. De exemplu, dacă taxonomia ta se numea "categorii-gatit" ai denumi fișierul taxonomy-categorii-gatit.php.

Kiran Kumar Kadavakollu Kiran Kumar Kadavakollu
4 apr. 2019 11:34:48
Toate răspunsurile la întrebare 4
0

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

22 feb. 2011 20:13:13
0

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ă

22 feb. 2011 20:36:29
0

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"); ?>
23 feb. 2011 06:51:42
1
-1

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)

13 apr. 2011 21:18:37
Comentarii

După cât îmi amintesc, WordPress nu a folosit niciodată implicit cms_ și a utilizat întotdeauna wp_, deși acest prefix poate fi schimbat de la un site la altul. Lucrul corect este să folosești $wpdb->posts decât să ghicești orice prefix anume.

s_ha_dum s_ha_dum
5 iun. 2013 15:53:21