web-dev-qa-db-fra.com

Faire écho aux catégories seulement s'il s'agit d'un enfant d'une catégorie donnée

J'ai des messages que je veux répéter après le contenu du message, uniquement s'ils sont enfants d'une catégorie parent donnée.

Exemple:

Catégorie parente: objectif
Catégories d’enfants "Objectif": notoriété, engagement de la marque

Si un article est classé, je souhaite qu'il répercute ces catégories:

<?php
    $categories = get_the_category();
    $seperator = ' ';
    $output = '';
    if($categories)
    {
        foreach($categories as $category) 
        {
            $output .= '<a href="'.get_category_link($category->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '">'.$category->cat_name.'</a>'.$seperator;
        }
        echo trim($output, $seperator);
    }
?>

J'utilise ceci, mais il génère évidemment toutes les catégories, plutôt que seulement celles qui sont les enfants de la cible "objectif".

Edit: La configuration actuelle ressemble à ceci, mais ne semble pas fonctionner. Si j'utilise l'ID, c'est bon:

<?php
        $categories = get_the_category();
        $seperator = ', ';
        $output = '<strong>GOAL:</strong> ';
        $category = get_category_by_slug('goal');
        if($categories)
        {
            foreach( $categories as $category ) 
            {
            if ( $category->parent == $category->term_id )
                $output .= '<a href="'.get_category_link($category->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '">'.$category->cat_name.'</a>'.$seperator;
        }
        echo trim($output, $seperator);
}
?>
1
Keefer

Changement:

$goal = get_category_by_slug('goal');
foreach($categories as $category) 
{
    $output .= '<a href="'.get_category_link($category->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '">'.$category->cat_name.'</a>'.$seperator;
}

Dans:

foreach( $categories as $category ) {
    if ( $category->parent == $goal->term_id)
        $output .= '<a href="'.get_category_link($category->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '">'.$category->cat_name.'</a>'.$seperator;
}

Où vous remplacez '123' par l'ID de la catégorie Objectif.

1
Jasper Denkers

Je suis d'accord avec la réponse ci-dessus, sauf qu'il devrait utiliser get_category_by_slug() au lieu d'identifiants codés en dur. Les commentaires ont été un peu déroutants à suivre parce que la question a également été modifiée - je l'ai donc séparée en ma propre réponse.

Pour travailler dans le peu de logique que vous avez ci-dessus ...

<?php
    $goal_id = get_category_by_slug('goal');

    $categories = get_the_category();
    $seperator = ' ';
    $output = '';
    if($categories)
    {
        foreach($categories as $category) 
        {
            if($category->parent == $goal->term_id){
                $output .= '<a href="'.get_category_link($category->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '">'.$category->cat_name.'</a>'.$seperator;
            }
        }
        echo trim($output, $seperator);
    }
?>

Je suppose que la slug de votre catégorie "objectif" est simplement goal.

1
eddiemoya

Qu'en est-il de l'utilisation d'un contrôle conditionnel?

voici un exemple qui vérifie la catégorie parent avec ID (4) .

Exemple -

//To show child  of cat with id - 4
if($category->category_parent == '4') 
    $output .= 'foo';
0
amit

vous pouvez utiliser get_the_category_list ('', $ category_id, $ optional_post-ID)

http://codex.wordpress.org/Function_Reference/get_the_category_list

0
jonathan