Cum să obții numele categoriei din URL și să-l transmiți unui template

2 ian. 2014, 18:13:29
Vizualizări: 14.8K
Voturi: 1

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(); ?>
0
Toate răspunsurile la întrebare 3
1

Î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;
2 ian. 2014 19:24:22
Comentarii

Milo, îți mulțumesc pentru ajutor. Soluția ta concisă a fost perfectă și mult mai simplă decât prima mea încercare. Învăț rapid multe despre WordPress, iar răspunsul tău a fost exact ceea ce aveam nevoie. Mulțumesc din nou.

user3154076 user3154076
3 ian. 2014 20:55:01
2

WordPress va folosi primul fișier de șablon pe care îl găsește în directorul temei curente din următoarea listă:

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

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.

user3154076 user3154076
2 ian. 2014 18:55:14

Am actualizat răspunsul meu cu codul.

Brad Dalton Brad Dalton
2 ian. 2014 19:10:19
1

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>
2 ian. 2014 18:26:57
Comentarii

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.

user3154076 user3154076
2 ian. 2014 18:49:37