Cum să obții numele categoriei din URL și să-l transmiți unui template
Folosesc următorul template de pagină pentru a afișa postările dintr-o singură categorie și intenționez să formatez primul post diferit de celelalte. Acest lucru funcționează conform așteptărilor, dar am hardcodat category_name în template. Doresc să folosesc acest template pentru mai multe categorii diferite și aș dori să învăț cum să transmit category_name către template dintr-un link.
De exemplu, linkul către pagina dorită care folosește template-ul special este http://wildcatweb.net/5th/ și '5th' este de asemenea category_name. Cum pot instrui template-ul să obțină category_name din URL și să-l folosească în template?
<?php
/*
Template Name: pageAssignments
*/ ?>
<?php get_header(); ?>
<div class="small-12 large-8 columns" id="content" role="main">
<header>
<h1 class="entry-title"><?php the_title(); ?></h1>
</header>
<!-- afișează ultimul post COMPLET -->
<?php query_posts('showposts=1&category_name=5th'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="lastest-post">
<h2 class="pagetitle"><?php the_title(); ?></h2>
<?php the_content(); ?>
</div><!--close .latest-post -->
<?php endwhile; endif; ?><!-- end lastest post -->
<!-- afișează rezumate postări mai vechi -->
<?php query_posts('showposts=5&offset=1&category_name=5th'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="older-post">
<h3 class="pagetitle"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
</div><!--.older-post -->
<?php endwhile; endif; ?><!-- end past-entry -->
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

În loc să creez pagini și să aloc un șablon, aș folosi filtrul category_template
pentru a încărca un șablon specific pentru toate acele categorii particulare. În acest exemplu, folosesc un array hardcodat, dar acesta poate fi adaptat pentru a încărca o opțiune care stochează slug-urile categoriilor cărora doriți să li se aplice șablonul.
function wpa_category_template( $templates = '' ){
$special_categories = array(
'one',
'another',
'more'
);
$this_category = get_queried_object();
if( in_array( $this_category->slug, $special_categories ) ){
$templates = locate_template( array( 'special_category.php', $templates ), false );
}
return $templates;
}
add_filter( 'category_template', 'wpa_category_template' );
Apoi nu mai este nevoie să interogați pentru aceste articole în șablon, deoarece articolele sunt deja în interogarea principală. (de asemenea, ca o observație, nu folosiți niciodată query_posts
).
În cadrul șablonului, puteți folosi single_cat_title
pentru a afișa numele.
De asemenea, nu trebuie să utilizați două interogări și bucle pentru a stiliza primul articol diferit, doar verificați variabila current_post
în buclă pentru a ști ce articol afișați în prezent.
if (have_posts()):
while (have_posts()):
the_post();
if( 0 == $wp_query->current_post ):
echo 'acesta este primul articol';
else:
echo 'acesta este articolul > 1';
endif;
endwhile;
endif;

WordPress va folosi primul fișier de șablon pe care îl găsește în directorul temei curente din următoarea listă:
- category-slug.php
- category-ID.php
- category.php
- archive.php
- index.php
Sursa http://codex.wordpress.org/Category_Templates
Puteți adăuga numele categoriei inserând acest cod în șablon înainte de Buclă (The Loop):
<p>Categorie: <?php single_cat_title(); ?></p>

Nu doresc ca acest șablon să se aplice tuturor paginilor de categorie, doar celor 5-6 care necesită formatare specială. De aceea creez un șablon diferit. În afară de a duplica șablonul pentru fiecare category-ID sau category-slug, ai vreo idee cum aș putea transmite numele categoriei către șablon? Mulțumesc pentru ajutor.

Dacă dorești să utilizezi acest șablon pentru mai multe categorii, probabil că l-ai denumit category.php
?
Pentru a obține numele Termenului care este afișat în prezent, folosește acest cod (înainte de a intra în Bucla principală) -
$taxonomy_slug = $wp_query->tax_query->queries[0]['taxonomy'];
$term_slug = $wp_query->tax_query->queries[0]['terms'][0];
$term = get_term_by('slug', $term_slug, $taxonomy_slug);
$term_name = $term->name;
Și apoi înlocuiește -
<h1 class="entry-title"><?php the_title(); ?></h1>
Cu -
<h1 class="entry-title"><?php echo $term_name ?></h1>

Nu am denumit fișierul category.php pentru că vreau să îl folosesc doar pentru câteva categorii, deoarece plănuiesc să adaug o formatare specială doar pentru 5-6 pagini. Mulțumesc că mi-ai arătat cum să afișez interogarea. Cred că va fi util pentru diverse lucruri. O să mă uit mai atent când voi avea ocazia mai târziu astăzi.
