final (ou à la fin si pas de ?>)
function nio_register_note_olfactive() {
$labels = array(
'name' => 'Notes Olfactives',
'singular_name' => 'Note Olfactive',
'add_new' => 'Ajouter une note',
'add_new_item' => 'Ajouter une note olfactive',
'edit_item' => 'Modifier la note',
'new_item' => 'Nouvelle note',
'view_item' => 'Voir la note',
'search_items' => 'Rechercher',
'not_found' => 'Aucune note trouvée',
'menu_name' => 'Signatures Olfactives',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => false, // ← CORRIGÉ : false car page WordPress manuelle
'rewrite' => array( 'slug' => 'signatures-olfactives' ),
'menu_icon' => 'dashicons-coffee',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'show_in_rest' => true,
'menu_position' => 5,
);
register_post_type( 'note_olfactive', $args );
}
add_action( 'init', 'nio_register_note_olfactive' );
// ═══════════════════════════════════════════
// NIÕ — SHORTCODE PAGE INDEX SIGNATURES
// ═══════════════════════════════════════════
// Usage : [nio_signatures_index]
// Affiche toutes les notes en accordéon tri A-Z avec ancres pour la nav alpha.
function nio_signatures_index_shortcode() {
$args = array(
'post_type' => 'note_olfactive',
'posts_per_page' => -1,
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
);
$notes = new WP_Query( $args );
if ( ! $notes->have_posts() ) {
return '
Aucune note olfactive disponible pour le moment.
';
}
$current_letter = '';
$output = '';
while ( $notes->have_posts() ) {
$notes->the_post();
$first_letter = strtoupper( mb_substr( get_the_title(), 0, 1 ) );
// Séparateur alphabétique avec ancre pour la navigation alpha
if ( $first_letter !== $current_letter ) {
if ( $current_letter !== '' ) {
$output .= '
'; // ferme le groupe précédent
}
$output .= '';
$output .= '
' . esc_html( $first_letter ) . '';
$current_letter = $first_letter;
}
$excerpt = get_the_excerpt();
$permalink = esc_url( get_permalink() );
$famille = get_post_meta( get_the_ID(), 'famille_olfactive', true );
$output .= '
';
$output .= '';
$output .= '' . esc_html( get_the_title() ) . '';
if ( $famille ) {
$output .= '' . esc_html( $famille ) . '';
}
$output .= '
';
$output .= '';
if ( $excerpt ) {
$output .= '
' . nl2br( esc_html( $excerpt ) ) . '
';
}
$output .= '
En savoir plus →';
$output .= '
';
}
$output .= '
'; // ferme dernier groupe + index
wp_reset_postdata();
return $output;
}
add_shortcode( 'nio_signatures_index', 'nio_signatures_index_shortcode' );
// ═══════════════════════════════════════════
// NIÕ — NAVIGATION ALPHABÉTIQUE
// ═══════════════════════════════════════════
// Usage : [nio_alpha_nav]
// Affiche les 26 lettres. Lettres actives = lien ancre vers le groupe.
// Lettres inactives = grisées, non cliquables.
function nio_alpha_nav_shortcode() {
$args = array(
'post_type' => 'note_olfactive',
'posts_per_page' => -1,
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
'fields' => 'ids',
);
$ids = get_posts( $args );
$letters = array();
foreach ( $ids as $id ) {
$title = get_the_title( $id );
$letter = strtoupper( mb_substr( $title, 0, 1 ) );
$letters[ $letter ] = $letter;
}
ksort( $letters );
$output = '';
return $output;
}
add_shortcode( 'nio_alpha_nav', 'nio_alpha_nav_shortcode' );
// ═══════════════════════════════════════════
// NIÕ — META BOX : FAMILLE OLFACTIVE
// ═══════════════════════════════════════════
function nio_add_meta_box_famille() {
add_meta_box(
'nio_famille_olfactive',
'Famille olfactive',
'nio_render_meta_box_famille',
'note_olfactive',
'side',
'default'
);
}
add_action( 'add_meta_boxes', 'nio_add_meta_box_famille' );
function nio_render_meta_box_famille( $post ) {
wp_nonce_field( 'nio_famille_meta', 'nio_famille_nonce' );
$value = get_post_meta( $post->ID, 'famille_olfactive', true );
echo '';
}
function nio_save_meta_box_famille( $post_id ) {
// CORRIGÉ : vérifie le post type AVANT tout
if ( get_post_type( $post_id ) !== 'note_olfactive' ) {
return;
}
// CORRIGÉ : vérifie le nonce
if ( ! isset( $_POST['nio_famille_nonce'] )
|| ! wp_verify_nonce( $_POST['nio_famille_nonce'], 'nio_famille_meta' ) ) {
return;
}
// Évite les sauvegardes automatiques
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Vérifie les permissions
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
if ( isset( $_POST['famille_olfactive'] ) ) {
update_post_meta(
$post_id,
'famille_olfactive',
sanitize_text_field( wp_unslash( $_POST['famille_olfactive'] ) )
);
}
}
add_action( 'save_post', 'nio_save_meta_box_famille' );
Page non trouvée • Niõ
Passer au contenu