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.
Bonjour,
Tu as plusieurs fonction qui peuvent t'aider dans ton code avec les fonction get category.
https://developer.wordpress.org/reference/functions/get_category_by_slug/
https://developer.wordpress.org/reference/functions/get_category_parents/
https://developer.wordpress.org/reference/functions/get_category_link/
https://developer.wordpress.org/reference/functions/get_the_category/
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.
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.