web-dev-qa-db-fra.com

Comment obtenir le nom de la catégorie à partir de l'URL et le transmettre à un modèle

J'utilise le modèle de page suivant pour afficher les publications dans une seule catégorie et envisage de formater la première publication différemment des autres. Cela fonctionne comme souhaité, mais j'ai le nom_catégorie en dur dans le modèle. Je souhaite utiliser ce modèle pour plusieurs catégories différentes et souhaite apprendre à passer le nom de catégorie au modèle à partir d'un lien.

Par exemple, le lien vers la page souhaitée à l'aide du modèle spécial est http://wildcatweb.net/5th/ et '5th' est également le nom de catégorie. Comment puis-je dire au modèle de récupérer le nom de catégorie de l'URL et de l'utiliser dans le modèle?

<?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>

  <!-- show latest post FULL -->

 <?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 -->

 <!-- show older post excerpts -->

<?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(); ?>
1
user3154076

Plutôt que de créer des pages et d’attribuer un modèle, j’utiliserais le filtre category_template pour charger un modèle spécifique pour toutes ces catégories particulières. Dans cet exemple, j'utilise un tableau codé en dur, mais cela pourrait être adapté pour charger une option qui stocke les slugs de catégorie auxquels vous souhaitez appliquer le modèle.

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' );

Vous n'avez alors plus besoin de rechercher ces publications dans le modèle, car elles sont déjà dans la requête principale. (aussi, à part, ne jamais utiliser query_posts ).

Dans le modèle, vous pouvez utiliser single_cat_title pour afficher le nom.

Vous n'avez pas non plus besoin d'utiliser deux requêtes et boucles pour styler différemment le premier message, il suffit de vérifier la variable current_post dans la boucle pour savoir quelle publication vous êtes en train de générer.

if (have_posts()):
    while (have_posts()):
        the_post();

        if( 0 == $wp_query->current_post ):
            echo 'this is the first post';
        else:
            echo 'this is post > 1';
        endif;

    endwhile;
endif;
1
Milo

WordPress utilisera le premier fichier modèle trouvé dans le répertoire de votre thème actuel dans la liste suivante:

  1. catégorie-slug.php
  2. category-ID.php
  3. catégorie.php
  4. archive.php
  5. index.php

Source http://codex.wordpress.org/Category_Templates

Vous pouvez ajouter le nom de la catégorie en ajoutant ce code au modèle avant The Loop:

<p>Category: <?php single_cat_title(); ?></p>
0
Brad Dalton

Si vous souhaitez utiliser ce modèle pour plusieurs catégories, vous l'avez probablement nommé category.php?

Pour obtenir le nom du terme en cours d’affichage, utilisez ceci (avant d’entrer dans la boucle) -

$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;

Et puis remplacez -

<h1 class="entry-title"><?php the_title(); ?></h1>

Avec -

<h1 class="entry-title"><?php echo $term_name ?></h1>
0
David Gard