Files
thalim-theme/page-annonces.php
2026-05-12 23:33:46 +02:00

166 lines
5.8 KiB
PHP

<?php
$context = Timber::context();
$excluded_cat_ids = [12, 31]; // Séance de séminaire, Non classé
if ( ! is_user_logged_in() ) $excluded_cat_ids[] = 9; // Vie du labo
// Read filter query params
$active_axe = isset($_GET['axe']) ? intval($_GET['axe']) : 0;
$active_date_from = isset($_GET['date_from']) ? sanitize_text_field($_GET['date_from']) : '';
$active_date_to = isset($_GET['date_to']) ? sanitize_text_field($_GET['date_to']) : '';
$active_cat_id = isset($_GET['filter_cat']) ? intval($_GET['filter_cat']) : 0;
$filter_autres = isset($_GET['filter_autres']) ? 1 : 0;
$context['active_axe'] = $active_axe;
$context['active_date_from'] = $active_date_from;
$context['active_date_to'] = $active_date_to;
$context['active_category_id'] = $filter_autres ? 'autres' : $active_cat_id;
$context['active_cat_id'] = $active_cat_id;
$context['filter_autres'] = $filter_autres;
// Redirect ?filter_cat=X to the actual category page (preserving axe/date params)
if ( $active_cat_id && ! $filter_autres ) {
$cat_obj = get_category( $active_cat_id );
if ( $cat_obj && ! is_wp_error( $cat_obj ) ) {
$redir_params = array_filter([
'axe' => $active_axe ?: null,
'date_from' => $active_date_from ?: null,
'date_to' => $active_date_to ?: null,
]);
$redir_url = $redir_params
? add_query_arg( $redir_params, get_category_link( $cat_obj->term_id ) )
: get_category_link( $cat_obj->term_id );
wp_redirect( $redir_url, 301 );
exit;
}
}
// Determine active rubrique
$active_rubrique_id = 0;
if ($active_cat_id) {
$active_cat_obj = get_category($active_cat_id);
$active_rubrique_id = ($active_cat_obj && $active_cat_obj->parent)
? $active_cat_obj->parent
: $active_cat_id;
}
$context['active_rubrique'] = $active_rubrique_id;
// Base filter params preserved across all filter links
$base_filter_params = array_filter([
'axe' => $active_axe ?: null,
'date_from' => $active_date_from ?: null,
'date_to' => $active_date_to ?: null,
]);
// Build tax_query: exclude séances + optional category filter
$tax_query = [
'relation' => 'AND',
[
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $excluded_cat_ids,
'operator' => 'NOT IN',
],
];
if ($active_cat_id) {
$tax_query[] = [
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => [$active_cat_id],
'include_children' => !$filter_autres,
];
}
$query_args = [
'post_type' => 'post',
'posts_per_page' => 12,
'orderby' => 'date',
'order' => 'DESC',
'lang' => '',
'tax_query' => $tax_query,
'thalim_event_date_order' => true,
];
if ($active_axe) {
$query_args['meta_query'] = [[
'key' => 'axes_thematiques',
'value' => $active_axe,
'type' => 'NUMERIC',
]];
}
if ($active_date_from || $active_date_to) {
$query_args['thalim_event_date_filter'] = ['from' => $active_date_from, 'to' => $active_date_to];
}
// Axes thématiques for filter dropdown
$axes_groups = thalim_get_axes_filter_groups();
$current_axes = $axes_groups[0]['terms'] ?? [];
$context['filter_axes'] = $current_axes;
// Rubrique/catégorie filter links (stay on this page with filter_cat param)
$page_url = get_permalink();
$all_cats = get_categories(['taxonomy' => 'category', 'hide_empty' => false, 'exclude' => $excluded_cat_ids]);
$filter_parents = [];
foreach ($all_cats as $cat) {
if ($cat->parent == 0) {
$filter_parents[] = [
'id' => $cat->term_id,
'name' => thalim_cat_name($cat),
'slug' => $cat->slug,
'link' => $base_filter_params
? add_query_arg($base_filter_params, get_category_link($cat->term_id))
: get_category_link($cat->term_id),
];
}
}
$context['filter_parents'] = $filter_parents;
$filter_categories = [];
if ($active_rubrique_id) {
foreach ($all_cats as $cat) {
if ($cat->parent == $active_rubrique_id) {
$filter_categories[] = [
'id' => $cat->term_id,
'name' => thalim_cat_name($cat),
'slug' => $cat->slug,
'link' => $base_filter_params
? add_query_arg($base_filter_params, get_category_link($cat->term_id))
: get_category_link($cat->term_id),
];
}
}
}
// Add "Autres" entry if active rubrique has posts directly assigned to it
if ($active_rubrique_id && !empty($filter_categories)) {
$lang = thalim_current_language();
$direct_check = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 1,
'fields' => 'ids',
'no_found_rows' => true,
'lang' => '',
'tax_query' => [[
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => [$active_rubrique_id],
'include_children' => false,
]],
]);
if ($direct_check->have_posts()) {
$params = array_filter(array_merge($base_filter_params, ['filter_cat' => $active_rubrique_id, 'filter_autres' => 1]));
$filter_categories[] = [
'id' => 'autres',
'name' => $lang === 'en' ? 'Other' : 'Autres',
'slug' => 'autres',
'link' => add_query_arg($params, $page_url),
];
}
}
$context['filter_categories'] = $filter_categories;
$posts = Timber::get_posts($query_args);
$context['cards'] = thalim_get_cards_data($posts);
$context['posts'] = $posts;
Timber::render('page-annonces.twig', $context);