是否创建显示类别列表标题+简短说明的页面?

时间:2015-09-14 作者:tali

我有一些循环遍历所有类别的代码,并且:

将它们组织在(父)类别及其子类别的层次结构上

回复标题+每个类别的简短描述+添加“阅读更多”链接到该类别的完整内容。

单击子类别之一的“阅读更多”should 已引导到具有full content description

检查他们是否有帖子。

显示属于该类别的帖子列表(摘录+阅读更多链接)

现在,当用户单击其中一个子类别(阅读更多链接)时,它会导致另一个页面,该页面仅显示该类别,无论是否有帖子,但我希望它现在显示该类别的完整描述,而不仅仅是简短描述。。

我想如果我有一种方法来添加一个唯一的类,并通过该方法将页面定位为一个类别(子类别),我可以解决这个问题/这是正确的方法吗?

类别中的代码。php:

  <?php 
$CategoryPar = get_category( get_query_var( \'cat\' ) ); 
$cat_id = $CategoryPar->cat_ID;
  $args = array(
  \'orderby\' => \'name\',
  \'child_of\'           => $cat_id,
  \'hide_empty\' => FALSE,
  \'order\' => \'ASC\'
        );
$Ecategories = get_categories($args);

echo\'<div class="cat-sub-title">\';

foreach($Ecategories as $Ecategory) { 
 echo \'<p><a href="\' . get_category_link( $Ecategory->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $Ecategory->name ) . \'" \' . \'>\' . $Ecategory->name.\'</a> </p> \';
 echo \'<div class="cat-sub-title-desc">\'. $Ecategory->description . \'</div>\';
                   } 
echo\'</div>\';

?>

 <?php if( category_has_children( $cat ) == false) : ?>

 <?php get_template_part( \'loop\' );?>

  <?php endif; ?> 
和过滤器的功能。php

add_filter( \'category_description\', \'cyb_trim_category_desc\', 10, 2 );
function cyb_trim_category_desc( $desc, $cat_id ) {

    // wp_trim_words( $text, $num_words = 55, $more = null );
    $desc = wp_trim_words( $desc, 55, \'...<p class="wrap-more-link"><a class="more-link" href="\' . get_category_link( $cat_id ) . \'">\' . __("Read more >>", "text-domain" ) . \'</a></p>\' );

    return $desc;
}
第一张图片-单击主菜单中的一个类别将引导用户访问此页面(它不是模板页面)

第二张图片-点击上一页中子类别的“阅读更多”链接之一将指向此页面-该子类别没有帖子,我希望它显示完整的描述长度。这些是身体类

class="archive category category-eternal-in-the-field category-23"

1 个回复
SO网友:cybmeta

您只需要添加一些条件来应用或不应用过滤器。例如,如果不想在类别存档页面上应用修剪,一种可能的解决方案是:

add_filter( \'category_description\', \'cyb_trim_category_desc\', 10, 2 );
function cyb_trim_category_desc( $desc, $cat_id ) {

    // Apply only if we are not in category archive template
    if( ! is_category() ) {

        // wp_trim_words( $text, $num_words = 55, $more = null );
        $desc = wp_trim_words( $desc, 55, \'...<p class="wrap-more-link"><a class="more-link" href="\' . get_category_link( $cat_id ) . \'">\' . __("Read more >>", "text-domain" ) . \'</a></p>\' );
    
     }

    return $desc;
}
或者,如果要仅对特定页面模板应用修剪:

add_filter( \'category_description\', \'cyb_trim_category_desc\', 10, 2 );
function cyb_trim_category_desc( $desc, $cat_id ) {

    // Apply only if we the current page use my-page-template.php
    if( is_page_template( \'my-page-template.php\' ) ) {

        // wp_trim_words( $text, $num_words = 55, $more = null );
        $desc = wp_trim_words( $desc, 55, \'...<p class="wrap-more-link"><a class="more-link" href="\' . get_category_link( $cat_id ) . \'">\' . __("Read more >>", "text-domain" ) . \'</a></p>\' );
    
     }

    return $desc;
}
你只需要define when you want to apply the trimming and apply the propper conditional.

一个可能的问题是您正在使用category.php 用于类别列表。该模板旨在显示属于某个类别的帖子列表,您应该使用它。您应该在另一个模板文件中构建类别列表,可能是custom page template, 所以你可以使用is_page_template() 有条件的,就像上面的最后一个例子一样。

更新正如我之前所说,您应该避免使用category。php模板文件列出您的类别。类别php模板文件旨在列出属于特定类别的帖子,您可能会因为将其用于其他目的而遇到问题。

例如,在您添加到问题的图像中,我可以看到类category-2 在主体元素上。这意味着WordPress进行了一个查询,以从ID=2的类别中获取帖子,但当类别为时。php模板已到达,您浪费了该查询,并创建了另一个查询来列出类别。这是在浪费耗费金钱的资源;此外,你最终可能会遇到问题,就像你正在经历的一样。如果ID=2的类别没有帖子,会发生什么情况?在你的主题/插件/WordPress核心中,这种情况的逻辑是什么?

相反,您应该使用特定的页面模板文件来构建类别列表。例如,您可以创建模板页面类别列表。php:

<?php
/**
 * Template Name: Categories list page
 */


 // Here the code to build the categories list

?>
现在,创建一个新页面,选择;类别列表页;template和Instruce在筛选器中为类别描述生成条件:

add_filter( \'category_description\', \'cyb_trim_category_desc\', 10, 2 );
function cyb_trim_category_desc( $desc, $cat_id ) {

    // Apply only if we the current page use my-page-template.php
    if( is_page_template( \'page-categories-list.php\' ) ) {

        // wp_trim_words( $text, $num_words = 55, $more = null );
        $desc = wp_trim_words( $desc, 55, \'...<p class="wrap-more-link"><a class="more-link" href="\' . get_category_link( $cat_id ) . \'">\' . __("Read more >>", "text-domain" ) . \'</a></p>\' );
    
     }

    return $desc;
}
现在,您应该拥有类别页面列表,其中包含描述摘录和类别存档,其中包含完整的描述,如果类别有帖子或没有帖子,则不会出现问题。更重要的是,在不浪费资源的情况下,查询您不打算使用的帖子。

相关推荐

如何将自定义选项添加到wp_Dropdown_Categories?

我需要将自定义选项添加到wp_dropdown_categories. 现在,整个万维网世界还没有找到解决方案。。。因此,我在这里要求一个解决方案……因为我真的无法想象WordPress的开发人员没有考虑到这将永远不需要,对吗?