Come ottenere il nome della categoria dall'URL e passarlo a un template
Sto utilizzando il seguente template di pagina per visualizzare i post di una singola categoria e ho intenzione di formattare il primo post in modo diverso dagli altri. Funziona come desiderato, ma ho il category_name hardcoded nel template. Vorrei usare questo template per diverse categorie e mi piacerebbe capire come passare il category_name al template da un link.
Ad esempio, il link alla pagina desiderata che utilizza il template speciale è http://wildcatweb.net/5th/ e '5th' è anche il category_name. Come posso dire al template di ottenere il category_name dall'URL e usarlo nel 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>
<!-- mostra l'ultimo post COMPLETO -->
<?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><!--chiudi .latest-post -->
<?php endwhile; endif; ?><!-- fine ultimo post -->
<!-- mostra estratti dei post più vecchi -->
<?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; ?><!-- fine post precedenti -->
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Invece di creare pagine e assegnare un template, utilizzerei il filtro category_template
per caricare un template specifico per tutte quelle particolari categorie. In questo esempio uso un array hardcoded, ma potrebbe essere adattato per caricare un'opzione che memorizza gli slug delle categorie a cui vuoi applicare il template.
function wpa_category_template( $templates = '' ){
$special_categories = array(
'uno',
'altro',
'ancora'
);
$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' );
Quindi non dovrai più eseguire query per questi post nel template, poiché i post sono già nella query principale. (inoltre, come nota a margine, non usare mai query_posts
).
All'interno del template puoi usare single_cat_title
per visualizzare il nome.
Non devi nemmeno usare due query e loop per stilizzare il primo post in modo diverso, basta controllare la variabile current_post
nel loop per sapere quale post stai attualmente visualizzando.
if (have_posts()):
while (have_posts()):
the_post();
if( 0 == $wp_query->current_post ):
echo 'questo è il primo post';
else:
echo 'questo è il post > 1';
endif;
endwhile;
endif;

WordPress utilizzerà il primo file Template che trova nella directory del tuo Tema corrente dalla seguente lista:
- category-slug.php
- category-ID.php
- category.php
- archive.php
- index.php
Fonte http://codex.wordpress.org/Category_Templates
Puoi aggiungere il nome della categoria inserendo questo codice nel template prima del Loop:
<p>Categoria: <?php single_cat_title(); ?></p>

Non voglio che questo modello si applichi a tutte le pagine di categoria, solo alle 5-6 che necessitano di una formattazione speciale. Ecco perché sto creando un modello diverso. A parte duplicare il modello per ogni ID-categoria o slug-categoria, hai qualche idea su come potrei passare il nome della categoria al modello? Grazie per il tuo aiuto

Se desideri utilizzare questo template per più categorie, presumibilmente lo hai chiamato category.php
?
Per ottenere il nome del Termine attualmente visualizzato, utilizza questo (prima di entrare nel Loop) -
$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;
E poi sostituisci -
<h1 class="entry-title"><?php the_title(); ?></h1>
Con -
<h1 class="entry-title"><?php echo $term_name ?></h1>

Non ho chiamato il file category.php perché voglio usarlo solo per alcune categorie, dato che sto pianificando di aggiungere una formattazione speciale solo per 5-6 pagine. Grazie per avermi mostrato come fare echo della query. Penso che sarà utile per una varietà di cose. Lo guarderò meglio quando avrò tempo più tardi oggi.
