<?php
/**
* Functions du thème enfant Twenty Twenty-Five
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* 1) Charger les styles du thème parent + enfant
*/
function dp_child_enqueue_styles() {
$parent_style = 'twentytwentyfive-style'; // handle du parent (on s'en sort même si ce n'est pas parfait)
// Style du parent
wp_enqueue_style(
$parent_style,
get_template_directory_uri() . '/style.css'
);
// Style du thème enfant
wp_enqueue_style(
'twentytwentyfive-child-style',
get_stylesheet_directory_uri() . '/style.css',
array( $parent_style ),
wp_get_theme()->get( 'Version' )
);
}
add_action( 'wp_enqueue_scripts', 'dp_child_enqueue_styles' );
/**
* 2) Création des rôles personnalisés : Visiteur et Animateur
*
* À ne faire qu'une fois normalement, mais ce code peut rester là
* (WordPress ne va pas recréer les rôles à chaque fois, il va juste s'assurer qu'ils existent).
*/
function dp_creer_roles_personnalises() {
// --- Rôle VISITEUR ---
if ( ! get_role( 'visiteur' ) ) {
add_role(
'visiteur',
'Visiteur',
array(
'read' => true, // peut lire le contenu réservé
'edit_posts' => false, // pas d'écriture d'articles
'edit_pages' => false,
'publish_posts' => false,
'upload_files' => false,
'delete_posts' => false,
'moderate_comments' => false,
)
);
}
// --- Rôle ANIMATEUR ---
if ( ! get_role( 'animateur' ) ) {
add_role(
'animateur',
'Animateur',
array(
'read' => true,
'edit_posts' => true,
'edit_published_posts' => true,
'delete_posts' => true,
'delete_published_posts' => true,
'publish_posts' => true,
'edit_pages' => true,
'edit_published_pages' => true,
'publish_pages' => true,
'delete_pages' => true,
'delete_published_pages' => true,
'upload_files' => true,
// Pas de gestion du site/global (pas manage_options, etc.)
)
);
}
}
add_action( 'init', 'dp_creer_roles_personnalises' );
/* Fin création rôles */
/**
* 3) Shortcodes personnalisés
* - Ici on ajoutera [page_discussion]
* - Et plus tard [blog_filtrable_relevanssi], etc.
*/
/* Exemple de squelette pour le shortcode de discussion */
function dp_page_discussion_shortcode( $atts ) {
if ( ! is_singular() ) {
return '';
}
$post_id = get_the_ID();
// Si tu veux, plus tard, on pourra vérifier les rôles ici.
// if ( ! is_user_logged_in() ) { ... }
// Vérifie que les commentaires sont ouverts pour ce contenu
if ( ! comments_open( $post_id ) ) {
return '<p>La discussion n’est pas ouverte pour cette page.</p>';
}
ob_start();
?>
<div class="dp-discussion">
<h2 class="dp-discussion-titre">Discussion</h2>
<div class="dp-discussion-liste">
<?php
$comments = get_comments( array(
'post_id' => $post_id,
'status' => 'approve',
'order' => 'ASC',
) );
if ( ! empty( $comments ) ) :
?>
<ul class="dp-commentaires">
<?php
wp_list_comments( array(
'style' => 'ul',
'short_ping' => true,
'avatar_size'=> 32,
), $comments );
?>
</ul>
<?php
else :
?>
<p>Aucun message pour le moment. Lancez la discussion !</p>
<?php
endif;
?>
</div>
<div class="dp-discussion-formulaire">
<?php
comment_form( array(
'title_reply' => 'Ajouter un message',
'title_reply_to' => 'Répondre à %s',
'label_submit' => 'Envoyer',
'comment_notes_before' => '',
'comment_notes_after' => '',
), $post_id );
?>
</div>
</div>
<?php
return ob_get_clean();
}
add_shortcode( 'page_discussion', 'dp_page_discussion_shortcode' );
/* Fin shortcode discussion */
/**
* 4) Protection globale du site (DÉSACTIVÉE AU DÉPART)
*
* Quand tu voudras restreindre tout le site aux connectés,
* on décommentera ce bloc et on adaptera le slug de la page publique.
*/
// function dp_restriction_site_global() {
// if ( is_user_logged_in() ) {
// return;
// }
//
// if ( is_admin() || wp_doing_ajax() ) {
// return;
// }
//
// // Slug de la page publique (à adapter, ex: 'accueil-public')
// $public_slug = 'accueil-public';
//
// if ( ! is_page( $public_slug ) ) {
// wp_redirect( home_url( '/' . $public_slug . '/' ) );
// exit;
// }
// }
// add_action( 'template_redirect', 'dp_restriction_site_global' );
/* Fin protection globale */
/**
* 5) Espace réservé pour ta future deuxième collection d'articles
*
* Ici, plus tard, on pourra ajouter :
* - register_post_type( 'journal2', ... )
* - register_taxonomy( 'journal2_sujet', ... ), etc.
*/
// function dp_register_journal2_cpt() {
// // CPT + taxonomies viendront ici plus tard
// }
// add_action( 'init', 'dp_register_journal2_cpt' );