Détecter un slug parent

Par LuciferX, il y a 5 ans


Bonjour,

Je souhaiterai détecter le slug de la catégorie technologie passé dans l’url pour pour ajouter à un endroit une classe css et mettre en forme certains éléments des pages enfants (dans cet exemple, sur la page bluetooth, patati, patata, ...).

Voici le type d’url que j’ai:
https://monsiteweb.be/technologie/bluetooth/
https://monsiteweb.be/technologie/patati/
https://monsiteweb.be/technologie/patata/

De cette façon, j'obtiens le slug de la page en cours

$page_slug = get_post_field( 'post_name', $post_id );

Mais comment faire pour détecter le parent ?

Merci.

4 réponses

LuciferX, il y a 5 ans

Il s'agit d'un custom post type et je n'arrive pas à faire ce que je voudrais,
Est-ce que quelqu'un aurait un exemple fonctionnel ?

Voici à quoi ressemble mes custom post type repris dans fonction.php

/* ================================ Création de du custom post type technologies ================================ */ function wpm_custom_post_type() { // On rentre les différentes dénominations de notre custom post type qui seront affichées dans l'administration $labels = array( // Le nom au pluriel 'name' => _x( 'Technologies', 'Post Type General Name'), // Le nom au singulier 'singular_name' => _x( 'Technologie', 'Post Type Singular Name'), // Le libellé affiché dans le menu 'menu_name' => __( 'Technologies'), // Les différents libellés de l'administration 'all_items' => __( 'Toutes les technologies'), 'view_item' => __( 'Voir les technologies'), 'add_new_item' => __( 'Ajouter une nouvelle technologie'), 'add_new' => __( 'Ajouter'), 'edit_item' => __( 'Editer la technologie'), 'update_item' => __( 'Modifier la technologie'), 'search_items' => __( 'Rechercher une technologie'), 'not_found' => __( 'Non trouvée'), 'not_found_in_trash' => __( 'Non trouvée dans la corbeille'), ); // On peut définir ici d'autres options pour notre custom post type $args = array( 'label' => __( 'Technologies'), 'description' => __( 'Tous sur technologies'), 'labels' => $labels, // Si vous utilisez les Dashicons, mettez la classe CSS de celui que vous souhaitez 'menu_icon' => 'dashicons-awards', // On définit les options disponibles dans l'éditeur de notre custom post type ( un titre, un auteur...) 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), /* * Différentes options supplémentaires */ 'show_in_rest' => true, 'hierarchical' => false, 'public' => true, 'has_archive' => true, 'rewrite' => array( 'slug' => 'technologie'), ); // On enregistre notre custom post type qu'on nomme ici "technologies" et ses arguments register_post_type( 'technologies', $args ); } add_action( 'init', 'wpm_custom_post_type', 0 ); add_action( 'init', 'wpm_add_taxonomies', 0 ); //On crée 3 taxonomies personnalisées: Date de création, Fabriquant et Catégories de technologie. /* ================================ création de nos taxonomies personnalisées ================================ */ function wpm_add_taxonomies() { // Taxonomie Date de création // On déclare ici les différentes dénominations de notre taxonomie qui seront affichées et utilisées dans l'administration de WordPress $labels_date = array( 'name' => _x( 'Date de création', 'taxonomy general name'), 'singular_name' => _x( 'Date de création', 'taxonomy singular name'), 'search_items' => __( 'Chercher une date de création'), 'all_items' => __( 'Toutes les dates de création'), 'edit_item' => __( 'Editer la date de création'), 'update_item' => __( 'Mettre à jour la date de création'), 'add_new_item' => __( 'Ajouter une nouvelle date de création'), 'new_item_name' => __( 'Valeur de la nouvelle date de création'), 'separate_items_with_commas' => __( 'Séparer les dates de création avec une virgule'), 'add_or_remove_items' => __( 'Ajouter ou supprimer une date de création'), 'menu_name' => __( 'Date de création'), ); $args_date = array( // Si 'hierarchical' est défini à false, notre taxonomie se comportera comme une étiquette standard 'hierarchical' => false, 'labels' => $labels_date, 'show_ui' => true, 'show_in_rest' => true, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'date-de-creation' ), ); register_taxonomy( 'date', 'technologies', $args_date ); register_post_type( 'date', $args ); // Taxonomie Fabriquant $labels_fabriquants = array( 'name' => _x( 'Fabriquants', 'taxonomy general name'), 'singular_name' => _x( 'Fabriquant', 'taxonomy singular name'), 'search_items' => __( 'Rechercher un fabriquant'), 'popular_items' => __( 'Fabriquants populaires'), 'all_items' => __( 'Tous les fabriquants'), 'edit_item' => __( 'Editer un fabriquant'), 'update_item' => __( 'Mettre à jour un fabriquant'), 'add_new_item' => __( 'Ajouter un nouveau fabriquant'), 'new_item_name' => __( 'Nom du nouveau fabriquant'), 'separate_items_with_commas' => __( 'Séparer les fabriquants avec une virgule'), 'add_or_remove_items' => __( 'Ajouter ou supprimer un fabriquant'), 'choose_from_most_used' => __( 'Choisir parmi les plus utilisés'), 'not_found' => __( 'Pas de fabriquants trouvés'), 'menu_name' => __( 'Fabriquants'), ); $args_fabriquants = array( 'hierarchical' => true, 'labels' => $labels_fabriquants, 'show_ui' => true, 'show_in_rest' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array( 'slug' => 'fabriquants' ), ); register_taxonomy( 'fabriquants', 'technologies', $args_fabriquants ); register_post_type( 'fabriquants', $args ); // Catégorie de technologie $labels_cat_technologie = array( 'name' => _x( 'Catégories de technologie', 'taxonomy general name'), 'singular_name' => _x( 'Catégories de technologie', 'taxonomy singular name'), 'search_items' => __( 'Rechercher une catégorie'), 'popular_items' => __( 'Catégories populaires'), 'all_items' => __( 'Toutes les catégories'), 'edit_item' => __( 'Editer une catégorie'), 'update_item' => __( 'Mettre à jour une catégorie'), 'add_new_item' => __( 'Ajouter une nouvelle catégorie'), 'new_item_name' => __( 'Nom de la nouvelle catégorie'), 'add_or_remove_items' => __( 'Ajouter ou supprimer une catégorie'), 'choose_from_most_used' => __( 'Choisir parmi les catégories les plus utilisées'), 'not_found' => __( 'Pas de catégories trouvées'), 'menu_name' => __( 'Catégories de technologie'), ); $args_cat_technologie = array( // Si 'hierarchical' est défini à true, notre taxonomie se comportera comme une catégorie standard 'hierarchical' => true, 'labels' => $labels_cat_technologie, 'show_ui' => true, 'show_in_rest' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array( 'slug' => 'categories-technologies' ), ); register_taxonomy( 'categoriestechnologies', 'technologies', $args_cat_technologie ); register_post_type( 'categoriestechnologies', $args ); } // Miniature associée add_image_size( 'techno_img', 200, 200, true );

Le code de ma page single-technologies.php

<div id="techno_container"> <input id="tab1" type="radio" name="tabs" checked> <label for="tab1"><i class="fa fa-question-circle-o"></i><span>C'est quoi <?php the_title(); ?> ?</span></label> <input id="tab2" type="radio" name="tabs"> <label for="tab2"><i class="fa fa-cart-plus"></i><span>Produits associés</span></label> <section id="content1" class="tab-content"> <?php while ( have_posts() ) : the_post(); do_action( 'electro_single_post_before' ); // contenu the_content(); do_action( 'electro_single_post_after' ); endwhile; // end of the loop. ?> </section> <section id="content2" class="tab-content"> test </section> </div>

Et le code de ma page archives.php

<div class="archives_techno"> <h1>Technologies :</h1> <ul id="filters" class="clearfix"> <li><span class="filter active" data-filter="<?php $buffer = ''; foreach ($categories as $categorie) {$buffer .= '.' . strtolower($categorie->name) . ',';} echo rtrim($buffer, ','); ?>">Toutes</span></li> <?php foreach ($categories as $categorie) { ?> <li><span class="filter" data-filter=".<?php echo strtolower($categorie->name); ?>"><?php echo $categorie->name; ?></span></li> <?php } ?> </ul> <div class="clear"></div> <div id="portfoliolist"> <?php while ( have_posts() ) : the_post(); ?> <div class="portfolio <?php $terms = get_the_terms($post->ID, 'categoriestechnologies' ); if ($terms && ! is_wp_error($terms)) : $tslugs_arr = array(); foreach ($terms as $term) { $tslugs_arr[] = $term->slug; } $terms_slug_str = join( " ", $tslugs_arr); endif; echo $terms_slug_str; ?>" data-cat="<?php $terms = get_the_terms($post->ID, 'categoriestechnologies' ); if ($terms && ! is_wp_error($terms)) : $tslugs_arr = array(); foreach ($terms as $term) { $tslugs_arr[] = $term->slug; } $terms_slug_str = join( " ", $tslugs_arr); endif; echo $terms_slug_str; ?>"> <figure class="effet"><?php the_post_thumbnail("thumbnail", array("class" => "test")); ?> <figcaption> <h2><?php the_title(); ?></h2> <p></p> </figcaption><a href="<?php the_permalink(); ?>"></a> </figure> <div class="categ"> <?php $terms = get_the_terms($post->ID, 'categoriestechnologies' ); if ($terms && ! is_wp_error($terms)) : $tslugs_arr = array(); foreach ($terms as $term) { $tslugs_arr[] = $term->slug; } $terms_slug_str = join( " ", $tslugs_arr); endif; echo $terms_slug_str; ?> </div> </div> <?php endwhile; ?> </div> </div>

Par avance, un tout grand merci.

Jurian, il y a 5 ans

Bonjour,

Sincèremenent si je devais reprendre tous ton code j'en aurais pour des heures. Par contre tu peux essayé le fonction PHP strpos ( string position) pour récupérer ton slug parent de ta catégorie.

Exemple

$page_slug = get_post_field( 'post_name', $post_id ); if(get_the_category('technologie')) { $slug = strpos(get_the_category('technologie') . /, $page_slug); if ($slug.find('/')) { $slug = explode('/', $slug); foreach ( slug as $value) { if ( $value != '/' ) $slug = $value; } } }

J'ai écris de tête le code hors vc mais tu peux partir ce type de condition en gérant dans ta condition les sous catégorie.

Bon courage.

LuciferX, il y a 5 ans

Merci, je vais voir ce que je peux faire ;-)