diff --git a/includes/api.php b/includes/api.php new file mode 100644 index 0000000..b5d8e4f --- /dev/null +++ b/includes/api.php @@ -0,0 +1,121 @@ + 'GET', + 'callback' => 'build_posts', + 'permission_callback' => '__return_true', + )); + +}); + + +// ################ FILTER POSTS ################ + +function build_posts($request) +{ + $post_type = esc_html($request->get_param('post_type')); + $etiquette = esc_html($request->get_param('etiquette')); + $auteur = esc_html($request->get_param('auteur')); + $sort_by = esc_html($request->get_param('sort_by')); + $recherche = esc_html($request->get_param('recherche')); + + + // Construire les arguments de la query WordPress + $args = array( + 'post_type' => $post_type, + 'posts_per_page' => -1, + ); + write_log("##########params"); + + write_log(array( + 'post_type' => $post_type, + 'etiquette' => $etiquette, + 'auteur' => $auteur, + 'sort_by' => $sort_by, + 'recherche' => $recherche, + )); + + // Gestion du tri + switch ($sort_by) { + case 'date_desc': + $args['orderby'] = 'date'; + $args['order'] = 'DESC'; + break; + case 'date_asc': + $args['orderby'] = 'date'; + $args['order'] = 'ASC'; + break; + case 'title_asc': + $args['orderby'] = 'title'; + $args['order'] = 'ASC'; + break; + default: + $args['orderby'] = 'date'; + $args['order'] = 'DESC'; + } + + // Filtre par étiquette (taxonomie) + if (!empty($etiquette) && $etiquette != '1') { + $args['tax_query'] = array( + array( + 'taxonomy' => 'etiquettes', + 'field' => 'slug', + 'terms' => $etiquette, + ), + ); + } + + // Filtre par auteur + if (!empty($auteur) && $auteur != '1') { + $args['meta_query'] = array( + array( + 'key' => 'authors', // Ajustez selon votre structure + 'value' => $auteur, + 'compare' => 'LIKE' + ) + ); + } + + // Recherche par mot-clé + if (!empty($recherche)) { + $args['s'] = $recherche; + } + + $posts_query = new WP_Query($args); + + write_log($posts_query->posts); + + ob_start(); + if ($posts_query->have_posts()) : + while ($posts_query->have_posts()) : $posts_query->the_post(); + get_template_part('template-parts/components/cards/post-card', null, array( + 'ID' => get_the_ID(), + )); + endwhile; + else : + echo '
Aucun article trouvé.
'; + endif; + wp_reset_postdata(); + + $html_template = ob_get_clean(); + + $response_data = array( + 'html_template' => $html_template, + 'post_count' => $posts_query->found_posts, + 'query_args' => $args, // Pour debug + ); + $response = new WP_REST_Response($response_data); + + $response->set_status(200); + + return $response; +} +