Come ottenere il nome della categoria dall'URL e passarlo a un template

2 gen 2014, 18:13:29
Visualizzazioni: 14.8K
Voti: 1

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(); ?>
0
Tutte le risposte alla domanda 3
1

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;
2 gen 2014 19:24:22
Commenti

Milo, grazie per il tuo aiuto. La tua soluzione concisa era perfetta e molto più semplice rispetto al mio primo tentativo. Sto imparando velocemente molte cose su Wordpress e la tua risposta era esattamente ciò di cui avevo bisogno. Grazie ancora.

user3154076 user3154076
3 gen 2014 20:55:01
2

WordPress utilizzerà il primo file Template che trova nella directory del tuo Tema corrente dalla seguente lista:

  1. category-slug.php
  2. category-ID.php
  3. category.php
  4. archive.php
  5. 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>
2 gen 2014 18:26:51
Commenti

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

user3154076 user3154076
2 gen 2014 18:55:14

Ho aggiornato la mia risposta con il codice.

Brad Dalton Brad Dalton
2 gen 2014 19:10:19
1

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>
2 gen 2014 18:26:57
Commenti

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.

user3154076 user3154076
2 gen 2014 18:49:37