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.
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);
}
?>
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.
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
.
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) .
//To show child of cat with id - 4
if($category->category_parent == '4')
$output .= 'foo';
vous pouvez utiliser get_the_category_list ('', $ category_id, $ optional_post-ID)
http://codex.wordpress.org/Function_Reference/get_the_category_list