web-dev-qa-db-fra.com

créer une page qui affiche une liste de titres de catégories + une courte description?

J'ai un code qui parcourt toutes les catégories et:

1.organisez-les dans une catégorie Hiérarchie de (parent) et ses catégories enfants

2.echo les titres + brève description de chaque catégorie + ajouter "lire plus" lien vers le contenu complet de cette catégorie.

3.Cliquez sur la lecture de l'une des catégories enfants devrait avoir conduit à cette page de catégorie avec description complète du contenu

4 vérifie s'ils ont des postes ou non.

5. affiche la liste des publications (extrait + lien en savoir plus) appartenant à cette catégorie

maintenant, lorsqu'un utilisateur clique sur l'une des catégories enfants (lire plus de lien), il conduit à une autre page qui ne montre que cette catégorie, avec ou sans messages, mais je souhaite qu'il affiche maintenant la description complète de cette catégorie, et pas seulement le court-métrage. la description ..

Je pensais que si je pouvais ajouter une classe unique et cibler les pages avec une catégorie (catégorie enfant), je pourrais résoudre ceci/est-ce la bonne façon?

le code dans category.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; ?> 

et le filtre dans functions.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;
}

première image - cliquez sur l'une des catégories du menu principal pour amener l'utilisateur à cette page (ce n'est pas une page modèle)

http://i57.tinypic.com/24eyyxc.png

deuxième image - en cliquant sur l’un des liens de lecture des catégories d’enfants de la page précédente, vous accédez à cette page - cette catégorie d’enfant n’a pas de messages, je veux qu’elle affiche la longueur de la description complète. Ce sont les classes du corps class = "archive catégorie catégorie-eternel-dans-le-champ catégorie-23

http://i62.tinypic.com/30sin7t.png

1
tali

Il vous suffit d’ajouter des éléments conditionnels pour appliquer le filtre ou non. Par exemple, si vous ne souhaitez pas appliquer le découpage sur les pages d'archives de catégories, une solution possible pourrait être:

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

Ou, si vous souhaitez appliquer le découpage uniquement à un modèle de page spécifique:

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

Il vous suffit de définir le moment auquel vous souhaitez appliquer le rognage et appliquer la condition conditionnelle .

Un problème possible est que vous utilisez category.php pour la liste des catégories. Ce modèle est conçu pour afficher une liste de publications appartenant à une catégorie et vous devriez l'utiliser pour cela. Vous devriez construire la liste des catégories dans un autre fichier de modèle, peut-être un modèle de page personnalisé , afin que vous puissiez utiliser is_page_template() conditionnel comme le dernier exemple ci-dessus.

METTRE À JOUR

Comme je l'ai dit précédemment, vous devriez éviter d'utiliser le fichier de modèle category.php pour répertorier vos catégories. Le fichier de modèle category.php est destiné à répertorier les publications appartenant à une catégorie spécifique. Vous risquez donc de rencontrer des problèmes car vous l'utilisez à d'autres fins.

Par exemple, dans l'image que vous avez ajoutée à la question, je peux voir la classe category-2 sur l'élément body. Cela signifie que WordPress a effectué une requête pour obtenir les publications de la catégorie avec ID = 2, mais lorsque le modèle category.php est atteint, vous avez gaspillé cette requête et en avez créé une autre pour répertorier les catégories. C'est gaspiller des ressources qui coûtent de l'argent; En outre, vous pouvez vous retrouver avec des problèmes, tout comme vous expriment. Que se passe-t-il si la catégorie avec ID = 2 n'a pas de messages? Quelle est la logique de cette situation dans votre thème/plugins/noyau WordPress?

Au lieu de cela, vous devez utiliser un fichier de modèle de page spécifique pour créer la liste de catégories. Par exemple, vous pouvez créer le modèle page-categories-list.php:

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


 // Here the code to build the categories list

?>

Maintenant, créez une nouvelle page, sélectionnez le modèle "Page de liste de catégories" et indiquez la condition dans le filtre pour la description de la catégorie:

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

Maintenant, vous devriez avoir la liste des pages de catégories avec un extrait de description et des archives de catégories avec une description complète et sans problème si la catégorie a des publications ou non. Et plus important encore, sans gaspiller les ressources de quering de messages que vous n'allez pas utiliser.

1
cybmeta