web-dev-qa-db-fra.com

Obtenir les catégories parent du type de publication personnalisé

J'essaie d'afficher toutes les catégories appartenant au type de publication personnalisé dans lequel l'utilisateur se trouve.

Par exemple, cet article: http://bit.ly/1ANisxN Il s'agit d'un type d'article personnalisé appartenant à cette catégorie de page: http://bit.ly/1FYscKh

Comme vous pouvez le voir, la catégorie de page présente les catégories enfants, ce qui est exactement ce que je souhaite réaliser par la poste personnalisée: i.imgur.com/vk4K31T.png

C’est ce que j’ai essayé dans le message personnalisé d’afficher les catégories de parents sans succès:

<?php echo get_category_parents() ?>

À propos, voici comment la page de catégorie fait écho à ses sous-catégories:

<?php  
$terms = get_terms( 'btp_work_category' ); 
   foreach ( $terms as $term ) {
       ?>
       <li><a href="#" data-filter=".filter-<?php echo $term->term_id; ?>"><?php echo $term->name; ?></a></li>
       <?php  
  }
?>      

Une idée sur comment faire cela?

Par exemple cette structure de catégorie:

Electronique (Top catégorie)

  • Caméras (sous catégorie)

    • des postes
  • TV (sous catégorie)

    • des postes
  • Téléphones portables (sous catégorie)

    • des postes

Donc, si je suis sur un post cameras, je veux afficher la première catégorie et ses sous-catégories (qui sont relatives à cameras car elles sont toutes dans la catégorie "Électronique")

1
wp richard

Si vous êtes dans le modèle de publication personnalisée unique, vous pouvez obtenir les termes auxquels la publication appartient en utilisant

$terms = get_the_terms( get_the_ID(), 'btp_work_category' );

Ensuite, vous devez déterminer le terme parent et l'afficher avec ses enfants.

Le code ci-dessous suppose que la publication appartient à une catégorie supérieure (terme) et que l’arbre de taxonomie n’a pas plus de 2 niveaux.

$terms = get_the_terms( get_the_ID(), 'btp_work_category' );
if ( ! empty( $terms ) ) :
  echo "<ul>\n";
  // Parent term detection and display
  $term = array_pop( $terms );
  $parent_term = ( $term->parent ? get_term( $term->parent, 'btp_work_category' ) : $term );
  echo "<li>\n";
  echo '<a href="' . get_term_link( $parent_term, 'btp_work_category' ) . '">' . $parent_term->name . '</a>';
  // Getting children
  $child_terms = get_term_children( $parent_term->term_id, 'btp_work_category' );
  if ( ! empty( $child_terms ) ) :
    echo "\n<ul>\n";
    foreach ( $child_terms as $child_term_id ) :
      $child_term = get_term_by( 'id', $child_term_id, 'btp_work_category' );
      echo '<li><a href="' . get_term_link( $child_term, 'btp_work_category' ) . '">' . $child_term->name . "</a></li>\n";
    endforeach;
    echo "</ul>\n";
  endif; // ( ! empty( $child_terms ) )
  echo "</li>\n";
  echo "</ul>\n";
endif; // ( ! empty( $terms ) )
1
Przemek Maczewski

Voici quelque chose qui devrait un peu marcher ... malgré le fait que les CPT n'ont pas de catégorie parent comme le font les articles WP.

function get_cpt_parent_cat_aka_taxonomy() {
    global $post;
    $parent_tax_name = 'Undefined parent taxonomy!';
    $obj_taxonomies = get_object_taxonomies( $post->post_type, 'objects' );
    $slugs = array();
    if( !empty( $obj_taxonomies ) ) {
        foreach ( $obj_taxonomies as $key => $tax ) {
            if( $tax->show_ui === true && $tax->public === true && $tax->hierarchical !== false ) {
                array_Push( $slugs, $tax->name );
            }
        }
        $terms = wp_get_post_terms( $post->ID, $slugs );
        $term = get_term( $terms[ 0 ]->term_id, $terms[ 0 ]->taxonomy );
        $parent_tax_name = $term->name;
    }
    return $parent_tax_name;
}
0
Dameer