如何从URL获取类别名称并传递给模板

时间:2014-01-02 作者:user3154076

我正在使用以下页面模板在单个类别中显示帖子,并计划以不同于其他帖子的格式设置第一篇帖子。这可以根据需要工作,但我在模板中硬编码了category\\u名称。我想将此模板用于几个不同的类别,并想了解如何通过链接将category\\u名称传递给模板。

例如,使用特殊模板指向所需页面的链接为http://wildcatweb.net/5th/ “5th”也是category\\u名称。如何告诉模板从URL获取category\\u名称并在模板中使用?

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

3 个回复
最合适的回答,由SO网友:Milo 整理而成

我将使用category_template 筛选以加载所有这些特定类别的特定模板。在本例中,我使用了一个硬编码数组,但这可以用于加载一个选项,该选项存储您希望模板应用到的类别段塞。

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\' );
然后,您不再需要在模板中查询这些帖子,因为这些帖子已经在主查询中了。(另外,作为旁白,never use query_posts ).

在您可以使用的模板中single_cat_title 输出名称。

您也不必使用两个查询和循环来设置第一篇文章的不同样式,只需检查current_post var,以了解当前输出的帖子。

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;

SO网友:Brad Dalton

WordPress将使用它在当前主题目录中从以下列表中找到的第一个模板文件:

类别slug。php

  • category-ID.php
  • 类别。php存档。php索引。php源代码http://codex.wordpress.org/Category_Templates

    可以通过在循环之前将以下代码添加到模板来添加类别名称:

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

  • SO网友:David Gard

    如果您希望将此模板用于多个类别,可能您已经将其命名为category.php?

    要获取当前显示的术语的名称,请使用此选项(在进入循环之前)-

    $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;
    
    然后更换-

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

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

    结束

    相关推荐

    List of Posts and Categories

    我有一个自定义的物种分类法和一个自定义的动物post类型。我想在树状视图中显示它们,如下所示:所有动物Fish (taxonomy term)<鲨鱼(自定义贴子类型)太阳鱼Mammals<猴子斑马列表中的每个项目都将链接到各自的位置。因此,自定义帖子类型链接到动物,分类术语转到分类页面。我知道WordPress列出类别的方法,但我也希望将帖子分组到每个类别下(自定义分类法)。